Adding caching of pymongo Collection objects

Pulp retrieves Collection objects VERY frequently, and in that process, it does
a lot of extra work (such as ensuring indecies and monkey-patching). This
creates a huge drag on performance, especially on operations like unit copy.

Many of the unit tests actually depended on the behavior of ensuring indecies,
so I had to change them. There were also many tests making assumptions about
default sort orders, which we don't guarantee, so I had to change that too.