Add support persistent object queries

Queries can be created through the
PersistentObject::objectsWith...() automagic method. Criteria are
parsed from the method name. You can specify property names and
(optionally) comparison operators. You can also combine criteria with
And or Or:

	Person::objectsWithFirstName('Peter')
	Person::objectsWithFirstNameAndLastName('Peter', 'Shaw')
	Person::objectsWithFirstNameOrFirstName('Peter', 'Bob')
	Person::objectsWithFirstNameAndAgeGreaterThan('Peter', 30)

To actually fetch the persistent objects call fetch() on the returned
query object. Alternatively, you can call count() if you are only
interested in the number of persistent objects matching the query.
Update PersistentObject documentation

In the doc comment for the PersistentObject class, refer to the
objectsWith...() automagic method instead of findBy...().
Add more operators, fix NotEqualTo operator

Add Contains, BeginsWith, and EndsWith persistent object query
operators. These are implemented using the SQL LIKE operator and are
subject to driver-specific case sensitivity restrictions.

Fix NotEqualTo operator which would previously translate to '=', i.e.
the opposite of what was supposed to happen.
Remove PersistentObject::_querySet()

PersistentObject::_querySet() was never used to implement query sets.
Migrate legacy (find|count)By... automagic methods

Reimplement legacy (find|count)By... automagic methods on top of
persistent object queries.
Fetch persistent objects with proper class

Pass _persistentObjectClass to PDOStatementDecorator::fetchObject() in
PersistentObjectQuery::fetch().
Rename some persistent object query operators

Rename persistent object query operator Contains to Containing.
Rename persistent object query operator BeginsWith to BeginningWith.
Rename persistent object query operator EndsWith to EndingWith.

The new names make more sense, e.g.:

	Person::objectsWithLastNameBeginningWith('A')

As opposed to:

	Person::objectsWithLastNameBeginsWith('A')
Remove PDOStatementDecorator

The PDOStatementDecorator class is no longer needed. It was used to
ensure that persistent objects have their $pdo property set when being
fetched, but we now use PDOStatement::fetch(PDO::FETCH_ASSOC) instead of
fetchObject() and assign the PDO in PersistentObjectQuery::fetch().
Merge branch 'feature/persistent-object-queries' into develop

Add support persistent object queries. Queries can be created through
the PersistentObject::objectsWith...() automagic method. Criteria are
parsed from the method name. You can specify property names and
(optionally) comparison operators. You can also combine criteria with
And or Or:

	  Person::objectsWithFirstName('Peter')
	  Person::objectsWithFirstNameAndLastName('Peter', 'Shaw')
	  Person::objectsWithFirstNameOrFirstName('Peter', 'Bob')
	  Person::objectsWithFirstNameAndAgeGreaterThan('Peter', 30)
	  Person::objectsWithLastNameBeginningWith('A')

Available operators are:

- EqualTo
- NotEqualTo
- LessThan
- LessThanOrEqualTo
- GreaterThan
- GreaterThanOrEqualTo
- Containing
- BeginningWith
- EndingWith

The Containing, BeginningWith, and EndingWith operators are implemented
using the SQL LIKE operator and are subject to driver-specific case
sensitivity restrictions.

To actually fetch the persistent objects call fetch() on the returned
query object. Alternatively, you can call count() if you are only
interested in the number of persistent objects matching the query.

Remove PDOStatementDecorator. The PDOStatementDecorator class is no
longer needed. It was used to ensure that persistent objects have their
$pdo property set when being fetched, but we now use
PDOStatement::fetch(PDO::FETCH_ASSOC) instead of fetchObject() and
assign the PDO in PersistentObjectQuery::fetch().