HTMLForm: Support 'url' type

SecurePoll will have a field that's a url, so we may as well use the
correct HTML5 input type for it.

Change-Id: Id3ddd8f2efdff08c8a188089d321d143ce5ef9c9
API: Handle exceptions from ApiBeforeMain hook in a user-friendly manner

The immediate impetus behind this change is this series of events:

1. CirrusSearch hooks ApiBeforeMain to handle some setup that requires
   the User object.
2. So User is loaded from the session.
3. OAuth checks the headers as part of loading User.
4. OAuth sees that the headers are invalid, and since it was called from
   the API it throws a UsageException, expecting the API to catch it and
   return an appropriate response to the client.
5. But nothing does so, leading to an unhelpful "Internal Error" page
   being returned to the client.

We can do better than that.

Bug: 62312
Change-Id: Ib5735661eec6ebe57eaa69c67b399e703cc90fc4
Merge "API: Handle exceptions from ApiBeforeMain hook in a user-friendly manner"
Merge "HTMLForm: Support 'url' type"