#20 cache

DON'T MERGE! experimental caching version current status is that it now creates a cachable data structure, but doesn't actually cache it at all.