Correct semantics for TimeStampedWeakValueHashMap + add tests

This largely accounts for the cases when WeakReference becomes no longer strongly
reachable, in which case the map should return None for all get() operations, and
should skip the entry for all listing operations.