selection manager and tools/events refactor

This PR supersedes the previous selection PR. It adds:

* `Selector` class to mediate selections for individual tools
* `SelectionManager` class for data sources to manage selections and inspections.

Definitions:
* "selections" are sets of indices on a data source, they may be built up over time (if a tool support shift for multi-select, etc.) Selections are saved to a data source on the server y default. 
* "insepctions" are one off selections that do not persist to the server by default. They are useful for passive, hover like tools. 

EDIT: There is alot about selections intertwined with tools. I am also doing the "tools refactor" as part of this PR. More coming soon.