feat(collectionRepeat): huge optimization upgrades

Optimizations done thanks to ideas and questions thrown around by the team:

1. Only compile as many elements as the list needs visible at start, plus 50 for safety (but if more are really needed, they can be compiled)
2. Reuse elements as they go out instead of compiling new ones
3. Transform the scroller container normally so the items themselves need to only be transformed once. Before, it would scroll the container back up every time an item was scrolled past.
4. Elements that aren't currently visible are kept in the DOM (to save the time wasted by attaching them), but are set to visibility: hidden

TODO:

1. Fix .destroy()
2. Patch up unit tests