Memoize fully
OK, this seems like the best option.

We use #hash to ensure that options isn't retained in memory, and only
return the memoized value if it exists, since the block is only called
when there's no value.

The other option is to just not memoize, although that new branch I'm
working on would definitely benefit from memoization here
Projection file for use with vim-projectile or similar.
initial work
Provide accessors on the builder object.

Accessors are aware of defaults & coercions, and return the right thing.