Implement backend for PyQt5 + modify Qt4 backends to Qt5 module-layout using shim.

A backend for PyQt5 based on intial work by @badders, modified to fix Qt5 mouse event handling, then re-structured
to implement as a wrapper over the existing Qt4 code. Following discussions on this pull request:

https://github.com/matplotlib/matplotlib/pull/2471

the code has been restructured to implement PyQt5 backend as a first-class implementation, with other Qt backends
(PyQt4, PyQt4v2, PySide (Qt v4)) wrapping it and modifying as required. The issues of objects being moved around
in the Qt namespace (many QtGui objects now in QtWidgets) QtWidgets is simply assigned as a copy of QtGui if
not available. This achieves the intended outcome with the minimum code.

PySide required re-ordering of import on FigureCanvasQTAgg or paintEvent
function would not being called on FigureCanvasQTAggBase resulting in
black window.

A number of indentation, import and other fixes.