Bump version
Create base requirements for tox

tox dependencies can be established in a base environment and
subsequently included in other environments. While most of the
requirements themselves are handled in a separate file, using this
approach will ease potential future changes.
Use better versioning for tox

tox supports specifying a version range. By doing so, Simon's tests can
always be performed against the most up-to-date version of any minor
version of PyMongo (e.g., 2.4.2). As originally constructed, all tests
were performed against the original release (e.g., 2.4).
Add PyMongo 2.5 to tox
Change tox environment names

I think this is more readable.
Add ignored() context manager

@raymondh added `contextlib.ignored()` to Python 3.4 in
http://hg.python.org/cpython/rev/406b47c64480. I think it's awesome and
I want to use it in Simon. Because 3.4 hasn't been released yet, no
stable release of Python has it. Plus, Simon currently only supports
Python 2.6 and 2.7, so there's no guarantee Simon will be able to use
the version from `contextlib` once it's available.

All of the code in this commit was written by @raymondh. He kindly
shared it in his "Transforming Code into Beautiful, Idiomatic Python"
talk at PyCon 2013:
http://pyvideo.org/video/1780/transforming-code-into-beautiful-idiomatic-pytho
Remove integration tests for PyMongo 2.2 in tox

Now that tox uses the most recent release of each PyMongo release, the
integration tests are getting hung up for PyMongo 2.2. This is the same
as the behavior that was noted for PyMongo 2.3 in b679d6a.

It would appear that this is the result of a call to `getLastError()`.
It was fixed in mongo-python-driver/a33b0fc. More information can be
found in JIRA ticket PYTHON-371:
https://jira.mongodb.org/browse/PYTHON-371
Set minimum version of PyMongo to 2.4

PyMongo 2.4 was a significant milestone as it was the first to include
`MongoClient`. It was released after I began work on Simon, otherwise I
would have used it as the minimum supported version. Since `MongoClient`
is the future, I'd like to simplify my code by dropping support for
`Connection`. This will also mean I can simplify my code by dropping
support for `safe` (`safe` was deprecated in 58d342d).

If someone uses Simon with a version of PyMongo prior to 2.4, a
`DeprecationWarning` will be triggered. This should only happen if
someone installs an older version of PyMongo after they install Simon.

Fixes #21
Remove unnecessary code

The code to delete an attribute that is really a field in the internal
document became unnecessary with the changes to `Model.__setattr__()` in
5f1924c. The unnecessary code is being removed from `__delattr__()`.
Clean up

Because `pymongo_supports_mongoclient` is supposed to be set to `True`
only when no exception has occurred, it's not being handled inside the
`else` associated with the try/except rather than directly in the try.
Use the ignored context manager

The `ignored` context manager was added in 658c508. These are the
locations that could benefit from it. They're being updated to use it
instead of the try/except/pass style `ignored()` is meant to replace.
Clean up

This feels a bit easier to read.
Improve dictionary iteration

When iterating through the keys of a dictionary it is best to use
something along the lines of `for key in dictionary`. This is the most
efficient way to do it. This won't, however, only you to make changes to
the dictionary's keys. If such behavior is desired, you want to use the
`keys()` or `iterkeys()` methods; they will create a copy of the keys
and allow you to iterate over the copy.

In each of these instances, no changes are being made to the dictionary,
and so the iteration should happen directly on the dictionary, not on a
copy of its keys.
Remove mentions of things added in 0.1

There really is no need to say that something was added in version 0.1.
If there is no version mentioned, the default would be the first. All of
the references to `.. versionadded:: 0.1.0` are being removed.
Very early implementation of aggregation

This is a very early draft of adding support for the aggregation
framework to Simon. It by no means represents what I hope will be the
final implementation, but I wanted to get started somewhere.

The test being added is reflective of the code that has been added, it
will change as the interface changes.

References #22
PEP8
Clean up
Enforce that field_map is a mapping

If someone specifies a `field_map` that doesn't implmenting `Mapping`, a
`TypeError` will be raised. While this exception is of the right type,
the message associated with it isn't helpful as it applies to the
internal use of `field_map`. This explicit check allows for a meaningful
message with the exception.
Clean up

The `Model.__init__()` method does not raise `ConnectionError`. The
exception will be raised when trying to interact with the `db` property
of a model's `_meta` attribute.
Initial commit of the aggregation module

The `aggregation` module is my proposed home for classes related to the
aggregation framework. It may replace `Model.aggregate()` or it may be
utilized by it, I'm not really sure of the end result.

The way I see the module working are that the `Pipeline` class will be
used to construct the pipeline to pass into the `aggregate()` method of
the collection in PyMongo. What is returned will be an instance of some
other class (`ResultSet`?) that will contain the results of the
aggregation query.

At this point all I have is the `project()` method to include and
exclude fields from the result. The `$project` operator is also capable
of renaming fields and constructing embedded fields. When adding that
functionality, I need to keep `field_map` in mind. Fortunately I can use
`$project`'s renaming ability to handle a lot of the work.

References #22