Move kernel code into IPython.kernel

inprocess Kernel in kernel.inprocess
zmq Kernel in kernel.zmq
KernelManager stuff in top-level kernel

Main functional change: allow custom kernel Popen command

reissue of #2853, because it didn't seem to want to track the right commits

- [x] adds `KernelManager.kernel_cmd` configurable for launching a custom kernel
- [x] splits entry_point.base_launch_kernel into two steps: making the launch cmd and launching the subprocess
- [x] figure out where the entry_point functions belong, if it should be anywhere else
- [x] move IPython.zmq.kernelmanagerabc to IPython.kernel.kernelmanagerabc
- [x] move IPython.lib.kernel/IPython/zmq.entry_point to IPython.kernel.launcher / connect
- [x] move zmq.ipkernelapp.IPKernelApp to zmq.kernelapp  (I'll look at merging the classes, and see if it makes 
- [x] move IPython.zmq to IPython.kernel.zmq
- [x] move IPython.inprocess to IPython.kernel.inprocess
- [x] move embed_kernel from zmq.ipkernelapp to zmq.embed
- [x] move MultiKernelManager to IPython.kernel.multikernelmanager.
- [x] move IPython.zmq.blockingkernelmanager to IPython.kernel.blockingkernelmanager.
- [x] move IPython.zmq.kernelmanager to IPython.kernel.kernelmanager.
- [x] move IPython.ipkernel.Kernel to IPython.kernel.kernel.

If you use [*my*](https://github.com/minrk/iruby) iruby branch (every other one I found had failures in the msg spec / session), you can run ruby kernels with qtconsole/console/notebook with:

    ipython console --KernelManager.kernel_cmd='["ruby", "lib/kernel.rb", "{connection_file}"]' --Session.key=''

supersedes #2643