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.
You need to white-list this file to be run in https://github.com/matplotlib/matplotlib/blob/c60013005350201c4ea26bce9fea4b0951b79346/lib/matplotlib/__init__.py#L1397