Add filter/discriminator criteria at Query-level, not Expr (fixes #596)

Break up methods to inject filter criteria and discriminators into prepared queries. This is now done at the query builder level, instead of expressions, as it is only relevant for the top-most query array. These methods are also used by the DocumentPersister's load/loadAll() methods.

prepareNewObj() was renamed to prepareQueryOrNewObj(), since it is used by the Expr class and DocumentPersister's own load/loadAll() methods.

DocumentPersister::load() was the only method whose $criteria was not always an array, so scalar/MongoId conversion was moved within. Support for null $criteria was removed, as no code paths would provide such a value.