Bug fix (web): we were throwing a NPE in the _ case just by debugging
the key/value pair that didn't match anything (ironic).  We were trying
to print out the class of the unknown value.  Of course when the value
is null, boom!

Discovered then when trying to update personal info and the password
turned out to be null (because a while back, I overrode the
json-serialization code to return null for password)
New Feature (web): Can now alert the user if the site is going down for
maintenance.

In the table app_version, there's a new column 'downmessage'.  Update
that value with any message you like and navbar-bottom.html will display
it.

app-LoginCtrl contains the PingCtrl controller.  PingCtrl contains a
setInterval() call which pings the server every 2 minutes.  The ping
queries app_version.downmessage.  If the value is null/empty, then
nothing is displayed.  If anything is returned, it is displayed in the
bottom footer.

To avoid multiple instances of setInterval() begin kicked off, we
capture the timer id returned by the function, and in
app.js:routeChangeStart we cancel any existing timer

In some cases, clicking a link won't fire routeChangeStart because the
href is {{currentlocation}}.  These you have to handle on a case-by-case
basis.  Right now, the only case we've found that needs to be addressed
in when logging in via Facebook.

We call clearInterval() in app-FacebookModule:registerWithFacebook()