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.
TagCache: Fix bug that prevented persistent saving of alternatives.
PCode: Make sure to compile everything in PCode used by subevalers.

This helps breaking up cycles, resulting in less garbage.
1000 iterations doesn't seem to be enough when collecting PCode objects.
Schedule image cache cleanup around next 4:30 mark rather than next day.

This fixes an issue where the cleanup wouldn't run if a periodic restart
was performed every night, before the 4:30 mark.