Added authentication configuration for the notebook app.

In this PR I've refactored the authentication code for the NotebookApp. The LoginHandler is now responsible for all things authentication related - including validation/warnings, and determination of whether a login screen should be displayed. I've also exposed a configuration on the application which allows control of which LoginHandler to use.

My motivation for this is to implement alternative authentication schemes - my present data point is to implement a KerberosLoginHandler which makes use of an internal Active Directory password store (via kerberos). With the changes in this PR all that is needed is a simple LoginHandler subclass, and the configuration set along the lines of:

```c.NotebookApp.login_handler = 'my_module.KerberosLoginHandler'```

Because I want to sure this up a little more, my own subclass restricts the protocol to https only, and does not need a password defined in the configuration.

If there are any contentious issues here, I'd be happy to join you for a dev hangout in the near future.




> I suppose you want to override this class, it would still be nice to have uniform API for subclass that allow to use also username.

Hum, not sure what I was meaning. Probably that you could just define your own Subclass of LoginHandler and replace it using traitlets. Not sure it is even possible.