Implement index describe for MySQL.

This implements reflection for exisitng index/constraint types. The code
isn't as tidy as I'd like but it works.
Remove repeated conditions.
Add index reflection into describe()

Having one method to do index + column descriptions makes Table easier
to use. It also makes it possible to use index data more easily in other
parts of the framework.
Fix typo.
Add stub methods to postgres + sqlite schemas.
Add tests for index reflection

Fix issues with primary key reflection and add missing tests for
reflection of KEY statements.
Implement index reflection for sqlite.

Build index/constraint reflection for Sqlite.
Implement index/constraint reflection for postgres.

Implement index reflection for postgres.
Inline extraSchemaColumns()

It was only used by Mysql in a small way. Inline the features to save
complexity/time. Also fix issues related to describing tables that don't
exist in Sqlite.
Use constants where possible.

Remove duplicated primary key reflection. Primary keys are now reflected
separately.
Fix some coding standards errors.
Wrap long line.
Add Database/Exception

Adding a generic exception class for the various Database package
classes to use. This lets end developers catch database exceptions
separate from other framework exceptions.
Code review comments.
Merge pull request #1322 from markstory/3.0-describe-index

3.0 Add index/constraint reflection