* Implement optionalFetcher callback
* Allow rate limits for all fetcher types
* De-duplicate concurrent fetch operations
* Stricter type checks for cache value types
* Add abort-on-dispose support for all fetcher types
* Dispose terminates and awaits all in-progress fetches
* Throw on attempts to use a disposed cache
* Unit test cleanup
* Reduced overhead for async operations
* More normalized exception handling