Fix IPython.start_kernel()

Closes gh-4005
Fix passing user_ns to IPython.start_ipython()
Fix passing user_ns to IPython.start_kernel()
Use traitlet on InteractiveShellApp instead of storing user_ns via __init__
Add test for IPython.start_kernel()
Merge pull request #4016 from takluyver/IPython-start-funcs

Fix IPython.start_* functions

start_kernel() didn't work at all (#4005), and I found while investigating that passing user_ns to either start_ipython() or start_kernel() had no effect, because the Application wasn't passing it on to the Shell.

This is a simple fix for the most pressing issues. We should think about any other parameters that we want to be passed through from our top level API, e.g. possibly user_module.

closes #4005