Vastly improved installation procedure.

This commit improves the installation procedure massively. There should
no longer be any warnings or errors during the installation process,
even when using E_ALL and E_STRICT (assuming everything performs
properly and there are no errors such as database connection failures).

THIS NEW VERSION IS NOT COMPATIBLE WITH EXISTING INSTALLATIONS!
Please read on below for details.

As part of these changes, I decided to introduce a new global class
named Parrot, which serves the function of managing several things.
Currently, its primary purpose is to hold instances of the Config and
Database classes. It also provides a single universal URL generator.
Now, when you need a URL, use Parrot::getInstance()->getUrl().

This addition meant touching almost every corner of the code base. For
starters, most configuration is now stored in /system/config.php, and it
must be manually created by the person who creates the site. This
differs from the previous implementation where a config file was
generated dynamically by a setup script. The new install procedure
simply requires the administrator to specify the administrator account
details, and the setup script will create all of the necessary tables in
the database.
These changes mean the meta table has been eliminated, as all of those
details are stored in /system/config.php.

The application is now fully bootstrapped by requiring the
/system/bootstrap.php file in your script. bootstrap.php ensures that
the Parrot object, the configuration and database objects and all of the
handlers, libraries and functions are available to your script, be it
index.php for the web frontend, or setup.php, for installation.

Moving from using the database class as a singleton to an actual object
accessed through the Parrot singleton means that every database call had
to be rewritten. Now, every time you want to do database operations,
you'll need to grab a copy of the Database object like so:
Parrot::getInstance()->database();
With that object, you can use the convenient newStatement() method,
where you pass it a query and it automatically returns a PDOStatement
object for you to work with. Alternatively, you can use the getPDO()
method to gain access to the raw PDO object.

The other important database-related change is the change of structure.
Most fields have been modified to no longer use the "TEXT" datatype.
Instead, most text fields use VARCHAR. The "lock" and "sticky" fields in
the Discussions table have been converted to use the TINYINT datatype,
which is the current recommended way of implementing a boolean field in
a MySQL database. This change has necessitated several changes
throughout the codebase which have made the new code incompatible with
previous versions. As a result, you will have to reinstall the
application in order to continue using Parrot. Look on the bright side,
this is a great opportunity to test out the new installation procedure!

Finally, all hard tabs have been converted to soft tabs.

I'm sure there are more changes out there that I've neglected to
mention. The magnitude of these changes are huge. I've moved several
files around, changed the way the application is booted, separated the
routing from the boot process, introduced a new configuration system,
cleaned up various functions. I've tried to squash as many bugs as
possible but I'm sure there'll be more so please feel free to start
patching away.

I think the next milestone should be to fix up the database structure.
Currently none of the database tables have primary keys. This makes them
very difficult to work with in tools such as phpMyAdmin, and also means
the integrity of the data can be compromised.

I've poured quite a lot of time into this so I hope the work pays off in
peoples' eyes :)

Test Test Test!