UserTag: Store saved scopes in external mapping to avoid circular refs.

Also moved the CompDefCacheEntry class out of the Frame/Tag classes to
avoid circularities originating from parent pointers.
Move the CacheTagEntry class out of the TagCache class.

To avoid circular refs due to parent pointers.
TagCache: Store individual entries in Roxen's cache.

This means we can avoid holding references to PCode objects through the
alternatives mapping, which helps break circularities. Also, the code
needed to store non-persistent entries from persistent frames in the
RAM cache could be removed thanks to the more generic cache handling.