Edit/View User Form, Bugfixes, API Error Handling

Added a Form class and many support classes, which allow forms to be
built in PHP and then rendered, populated, verified, et cetera easily
and consistently.

Used this to start building the edit/view user page.  The front-end
JavaScript validation has not yet been implemented, but most of the form
elements have been.  Have to add the form elements that get
added/removed/changed based on the user's privilege level, but before I
can do/test that, I need to update the database schema to reflect the
new privilege system (three levels of privilege -- user, superuser, and
admin -- rather than just two -- user and admin).

Added a function directly to the User class for hashing passwords
externally, which frees the form handling code from concerning itself
with the implementation details thereof.  It also keeps the
BCRYPT_ROUNDS constant local to the user.php file, which is always good.

Brought the Request class up-to-date with the latest changes from
HomePage/CivicJobs.

Added routing to main.php, necessary for the inclusion of the edit/view
user controller.

Changed the stylesheet structure around a bit.  Still haven't decided on
a permenant structure, so for now I've kept login.css in the repo,
albeit with nothing in it (all those rules were also needed for the
edit/view user page's form).

Added a function to the User class which allows the user data in that
object to be easily saved to the database.

Modified the User class so that it can use either an associative array
or a MySQLRow as its backing store.  This allows User objects to be
created from the associative arrays that are retrieved from Form
objects.

Changed the way API errors are handled so that an error in an API call
doesn't result in the generation of a massive, user-friendly error page
(totally useless to an API consumer and just a waste of processing
time/bandwidth) but rather simply ends the request and sets the HTTP
status code appropriately.

Made some changes to the Bcrypt class to try and solve some excessive
slowness there, but the changes I made don't seem to have helped.  Will
keep working on this.