Notes:
* Currently only works with -p 1
* Caching is mostly compatible with existing caches, but not completly.
This needs more testing and more code reviews
* There are probably many code paths that will throw exceptions.
* Not ready for general use yet, but is OK for testing