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 

(did you mean static method?) Not entirely no. I've actually overridden the ```post``` method which does allow for a username to be posted, but I agree, it would be nice to unify this so that subclasses don't go wandering off implementing their own username processing schemes.