MEP22: Navigation by events

This PR is the implementation of MEP22, it supersedes the https://github.com/matplotlib/matplotlib/pull/2759

The main differences are:
* Navigation implement events
* Toolbar connects to Navigation events to change its sate (add/remove tools, change toggle state)
* Toolbar used `Navigation.tool_trigger_event` to trigger tools
* Rubberband and SetCursor are implemented as tools

**Edited**: for clarity
Back again and time to start commenting...

Judging by the constructor, it looks like this event will only get called for when tools get added to the *toolbar*, so this should probably get made clear here in the comment, and perhaps also the class name, such as ToolAddedToToolbarEvent, or perhaps even ToolbarToolChangeEvent adding in a type of change to the constructor, thus we can have Add, Remove, Modified etc served by one class.