Change root to tick before validation/hover/keys, add runScriptLater to UI.

1.) Moved ticking tickParticipants to before checking keys or updating
hover components. Initial fear was that tick participants may rely on
validated members, but the set of cases where this is valid is much smaller
than the set of cases where it's invalid. With luck, nobody actually relies
on this behavior. This fixes part 1 of why UI animation glitches visibly
when tripping visibility within a tick.

2.) Added runScriptLater methods to UserInterface. These create a queue
for scripting elements which will be added (via runScript) to the
tickables AFTER the current tick. This queue is lazily instantiated so
shouldn't add any memory footprint on interfaces not needing this
behavior. This fixes part 2 of why UI animation glitches visibly when
changing visibility alongside offset within a tick.