Range controller fix

:warning: Not ready to merge yet. Here for comment and review.

*What's done*
- selection is now always an array, and maintains its invariants using @stuk's duck-punch.
- selection can not be directly set (for now it shallow-clones in the setter, but I'd like to just get rid of the setter.)
- RangeController tests, heavily edited, now pass, including the new ones @Stuk wrote that previously failed.

*What's left*
- Enforce uniqueness of selection items.
- Fix failing tests in AbstractSelect.