Tree traversal

- the emission of “tick” / “advance” / frame number events now happens in tree order (depth first) rather than insertion order.
- it also adds a “tickEnd” event for each timeline after all child timelines emitted their frame events.
- There is still optimization opportunity: `addChildren()` could maintain a child timeline array on each timeline instance to make iteration faster.