Calendar rebase (4) 

This replaces #1352.
> We are sanitizing the hash for security reasons, right?

No. We are escaping valid identifiers. You cannot take an arbitrary `id` and stick a `#` in front of it because the `id` can contain characters that are meaningful as a selector.

> we sanitize in _handleKeydown like this...and add a cache for elements in _setActiveDescendant and like this

That would defeat the purpose of the cache. The cache was just a suggestion to avoid having to escape the same exact selector in two different places. You would escape the selector in `_setActiveDescendant()` and store a reference to the element. Then you'd use that reference in `_handleKeydown()` because it can never change without `_setActiveDescendant()` being invoked again.

> We would need to empty and rebuild that cache on every refresh as the grid items are rebuilt.

Why? There is only ever one active descendant, right? Why would you store these references in a hash?