API Database refactored into controller/schema/connector components. Ticket #7429

Created new framework based on main database class, with separate classes to handle connection and schema management
Refactored database into base database class, connector class, schema manager class, and query class. These are hooked together via dependency injection with database recipes handled via yaml / Config subsystem.
New syntax for beginSchemaUpdate. Now schemaUpdate wraps a callback.
Updated phpdoc
Retired many instances of incomplete and legacy database code
New standard implementation of requireIndex and updated convention for handling of index specification strings. This should prevent having lots of is_array conditions during schema updates.
Added new PDOConnector and set as the default MySQL connector class.

Prepared statements not implemented yet.
API Parameterised query framework
Working copy
API Convert queries to use paramaterised queries
BUG fixes to SQLQuery::normalisePredicates and DataObject::get_one
BUG Fixed issue with incorrect column escaping and PDO error reporting
BUG Problems with DataQuery_SubGroup not supporting paramaterised queries. Created SQLConditionGroup interface to formally allow computed conditions.
Resolved issues with some SQLQuery functions not correctly supporting parameter expansion.
Consolidated some duplicated documentation.
BIG Fixed incorrect method names in PartialMatchFilter.php
API Replaced deprecated API
Fixed typos
Updated Aggregate to consider sql/parameters in caching
Fixed DataQuery select to consider parameters
Added parameters to missing ->sql() function calls
Bug Fixed issue with match filters incorrectly assuming the underlying query is and-conjunctive.
Updated the DataListTest to support parameterised queries.
Code tweaks and fixes, continued cleanup of @todos
Removed done todos
BUG Fixed issue with SQLQuery->parsePredicate incorrectly treating literal conditions as parameterised conditions
BUG fixed issue where gridfield state was incorrectly passing in GridState_Data objects when record IDs where expected. This is due to a conflict between the way that values are retrieved from the state in various circumstances.