Use IPython debugger as execution exception interactive debugger if available.

Load and use IPython debugger for interactive debugging if available
during task exception handling. Fallback to pre v.11 IPython api if
needed. Fallback to standard debugger if IPython is not installed.

I considered making this a configurable option, however I couldn't think of a use case in which one would significantly prefer pdb over ipdb. Given that the shell functionality requires IPython, I assume nearly any user who uses interactive debugging would prefer the consistant use of the IPython shell.