adding preserveCache and noPreserveCache methods

- updated docs
- added tests
documentation improvements

- shorter explanation in readme
- jsdocs improved
- ensuring to check for `cache` before caching (as it did before)