Remove DataInjectable from Retrieval

Retrieval no longer unserializes retrieved data on its own.
Use a P::MongoDB call rather than reaching into DB
Extract test configuration to spec_helper
Extract persistence specs to their own file
Extract deletion specs to their own file
Extract retrieval specs to their own file
Remove trailing whitespace
Extract pagination specs to their own file
Extract associations specs
Extract update specs
Extract validations integration specs
Remove useless, obsolete spec
Extract serialization integration spec
Extract index integration specs
Use MongoDB cursor's limit method rather than arg

This is a huge optimization for indexed queries. If you sort with the
limit argument, you're still comparing all documents in the collection.
Sorting with the cursor's limit method, you only look at the N documents
you're limiting to.

For example, if you have 1000 documents in an `Article` collection,
which has a descending-order index on the `timestamp` attribute, and you
execute the following query:

```javascript
db.Article.find({}).sort({timestamp: -1}).limit(10)
```

You will only scan the 10 objects you want in the results. It can do
this because it knows the top 10 results based entirely on the index.

Before this commit, we were executing this query:

```javascript
db.Article.find({}, {limit: 10}).sort({timestamp: -1})
```

This was comparing all 1000 documents in the `Article` collection. Found
this while running an `explain()` on both queries.
Don't reassign merged values to a new hash