Make sure self._idle is set to `True` in all cases

Even if `draw` raises an exception.
add try block in backend_gtk.py

added block around `draw` in `idle_draw` which can raise an
exception and will leave the window in a bad state.
added try block to backend_gtk3.py

Added try block around `draw` in `idle_draw`.  If `draw`
raises an exception the figure is never marked idle again and
pyplot functions will not work as expect.
added try block in backend_tkagg.py

Added try block around `draw` in `idle_draw`.  If `draw`
raises an exception the figure is never marked idle again and
pyplot functions will not work as expect.
Merge pull request #2677 from tacaswell/fix_2583

Make sure self._idle is set to `True` in all cases