add Application.launch_new_instance classmethod

allows uniformity when making changes.

The change here that prompted it is passing arguments to the instance constructor and initialize.
use launch_new_instance classmethod to launch apps
add IPython.start_ipython

A public API for starting a real (non-embedded) IPython instance.

should avoid API breakage in the future due to simple module renames

as has just happened with the removal of frontend
expand start_ipython / embed docstrings

clarify the difference between them.
add IPython.start_kernel

for symmetry
Application.launch_instance

removes `new` from method name, since it isn't accurate.
use start_ipython in entry points

increases visibility of the public API to snoopers.
remove extra empty lines
Merge pull request #3538 from minrk/launch_ip

add IPython.start_ipython

A public API for starting a real (non-embedded) IPython instance.

should avoid API breakage in the future due to simple module renames, as has just happened with the removal of frontend.

For implementation purposes, I have added launch_new_instance as a classmethod on Application. I did this, because I wanted to add the ability to pass arguments to the instance, and didn't want to manually update every duplicate launch_new_instance.

closes #1537