Cache libraries after building

This change introduces caching of libraries after they are built. The
library will be cached against a key of the file name.

The caching is handled by
[MutaCache](https://github.com/danmidwood/mutacache), a library built to
handle caching of objects that can be mutated without mutating their
representation in the cache.

During testing it was discovered that copying the `structure` Buffers on
each type was extremely slow, and as such this change removes the
structure after an expression is built from it.