Fix handling of getSaveFileName to be consistent

PyQt4 and PyQt5 handle getSaveFileName differently, returning either
a filename or a filename,filter tuple respectively. PySide behaves as
for PyQt5. This caused bug #3454 producing an 'format not supported'
error as the tuple did not match any of the string types.

This updates each API to return a tuple as per PyQt5 (following the
principle of using the latest API as a target). For recent PyQt4
this means using getSaveFileNameAndFilter instead, for older PyQt4
we wrap the function to output a tuple.

Figure saving has been tested on PySide, PyQt4 and PyQt5.