Use Instance trait for user_ns instead of Dict.

Instance(dict) is None by default, unlike Dict().
Add a test for kernel started without user_ns kwarg.

user_module should not be an instance of DummyMod
Merge pull request #4188 from takluyver/dict-traitlet-none

Allow user_ns trait to be None

The Dict trait converts None to an empty dict, which caused the application to pass in a user_ns to the shell, which then behaves slightly differently, creating a DummyMod instance.