Improved selection widget

This is in preparation for enhancing the selection widgets as per #3486.

This expands the new `_Selector` class from #3376 and normalizes the API for the three current selection widgets: `RectangleSelector`, `LassoSelector`, and `SpanSelector`.  

The only known API change is that the ignore criteria from the `RectangleSelector` are now used for all three, since they were the most complete and robust.  

This also adds tests for all three widgets.
If by wrong you mean it had not support for buttons then yes.