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.
I would then change to InvalidOperationException, no? This method is being asked to operate on an object whose state is effectively "unknown" and thus this operation is invalid. NotImplemented makes it sound like we *chose* not to implement some part of functionality, whereas it seems the statement here is that we're protecting against a potential bug in our own code (the bug would not be "by choice").