Abstract app session details

This commit abstracts out the app session and authentication details
from views and controllers that don't need to know about them. The new
classes are AppSession which securely stores the user and auth token
data, Authenticator which makes requests to the api for user
authentication and creation, and FacebookHandler which holds the logic
for facebook session opening and error handling. All other files were
adapted to use these new classes.
Fix some things from PR comments

Turn November Project locations into an enum then store their string
abbreviations in a dictionary for easy referece.

Change Authenticator method for creating a user to take in all
parameters instead of a dictionary.

Move authentication failed notification into viewDidAppear and the
unregister into viewDidDisappear methods so the presentViewController
method wont be called on LoginViewController when its already open.
Move authentication failed notification

Move the authentication failed notification back to the viewDidLoad
method and check for view controller presence when a failed notification
is received.
Changes based on PR comments

Create a type for the locations enum, don't type check
presentedViewController, and lazy load private properties.