Functional memory cache implmenation

Here is a functional baseline cache implementation. At this point we are only establishing behavior and usage patterns and writing unit tests and samples to verify those patterns. Please limit any performance related comments limited to architectural level issues.

What's implemented:
- Set, TryGetValue, Remove, extensions
- Eviction callbacks
- Active triggers with callbacks
- Checking for time and lazy trigger expiration when retrieving items.

What not implemented:
- Background expiration detection for time or lazy trigger based expiration.
- Memory pressure monitoring or cleanup.
Yeah I've been thinking about this. I suspect DTO is correct and DT is incorrect. I say this because I'm guessing super weird stuff will happen if the machine's daylight savings time changes while the app is running. A rare occurrence for sure, but not outside the bounds of reality. I've run into similar types of bugs in programs before and they are nearly impossible to debug (because they reproduce only once or twice a year!).

Of course, should consult folks who actually know about this stuff so don't just listen to me :smile: