Also, can someone elaborate on the meaning of the EvaluationLink structure mentioned on the sheaf github readme?
These are the most basic, most primitive ways of representing data in the atomspace. In terms of understanding what this is about, you have to get (very) comfortable with them, and how/why they are a "generic" way of representing data.
Step two (and already, that's a big step) would be to understand how the "matrix" API allows you to slap an ordinary linear matrix on any kind of data in the atomspace -- take a slice through any graph, as it were. With the matrix, you can compute normal, ordinary joint probabilities - conditional probablities, marginals, entropies, mutual information etc. in very standard way, except that atomspace allows the matrix is extremely sparse -- e.g. a matrix with trillions of entries, of which only millions are non-zero. The matrix API is just a generic way of taking a linear algebra slice of your choice, through some arbitrary graph. What's novel here is the ability do handle extreme sparsity, and the ability keep your data in a "natural" graphical form, while slicing through it in a linear way.
Step three, the sheaf part, is currently super-minimal; it just grabs some of these slices and stitches them together. Not only is it minimal, but some of the most interesting code & algos are in a different location entirely, half-finished; I had to set aside that experiment some half-year ago, and haven't been able to return to it in a meaningful way, just yet.
To answer your questions: