added initial wv loader
Stub out baker class and task

* Stubbed out openelex.base.baker.Baker
* Stubbed out openelex.tasks.baker.state_file tasks
* Basic unit test cases (and a few tests) in tests.test_baker
* Added UnsupportedFormatError to openelex.exceptions

Addresses #39
Merge branch 'dev' of github.com:openelections/core into dev
Refactor to allow passing filtering/limiting args to each method

Given the long goal of filtering/limiting across states, remove
state as a required argument to the constructor and accept
filtering arguments to the different methods, imagining an
eventual chainable interface that breaks out filtering, limiting
and writing as separate calls.

I don't know if this is the best way to do it, but it makes the
most sense to me today.

Addresses #39
First pass at bakery

There's still a lot to do, but at this point it:

* Grabs and flattens data
* Writes CSV and JSON

Addresses #39
Use same timestamp for both data and manifest file.

Clean up the signatures for the writing and filename generation
methods so that they can take a timestamp from calling code.

Create the timestamp that will ultimately be used for generating
file names in the invoke task so the same timestamp will be used
for generating the filename of the manifest and the data file.

Handle creating the output directory, if it doesn't exist in the
top-level  write() method instead of repeating it in the format-
specific write methods.

Addresses #39
s/kwargs/filter_kwargs/

Clarify that the keyword arguments reflect the raw filtering arguments
that are passed down from the CLI arguments to the invoke task.

"There are only two hard things in Computer Science: cache invalidation and
naming things."

-- Phil Karlton

Addresses #39
Real (but still incomplete) information in manifest.

We still need to decide on what data should be in the manifest
and how it should be formatted.

Addresses #39
Pass outputdir argument to write, write_manifest

Pass the outputdir command line argument through to
``Baker.write()`` and ``Baker.write_manifest()``.

Update indentation of chained method calls. I like chaining as a
pattern, but I often find the best/standard way to indent such
calls in Python to be inconclusive.  I'm open to suggestions here.

Addresses #39
More precise date filter argument parsing

Explicitly try to parse the date against supported format strings
instead of just checking string length.

Raise a ``ValueError`` if we encounter unsupported formats.

Addresses #39
Baker comments, docstrings

Addresses #39
Merge branch 'dev' into 39-bakery

Grab model indexes.
Fix typo that caused repeated field data

s/contest/candidate/

Addresses #39
Exclude redundant fields in Roller

Use the ``exclude()`` method on the querysets and lists built with
a ``build_exclude_fields()`` method to get rid of redundant fields.

Collect and reference the querysets used by the Roller in a somewhat
more declarative, DRY way.

Also, sort the fields alphabetically.

Addresses #39
Introspect relationships instead of hard-coding

Introspect the model relationship fields in the ``Roller``
constructor instead of hard-coding them.  This allows for updating
or subclassing ``Roller`` in a more declarative way through
setting ``Roller.collections`` and ``Roller.primary_collection``

Addresses #39
Factories for populating test data

Adds [Factory Boy](https://github.com/rbarrois/factory_boy) as a dependency.

Make ``TestRoller`` inherit from ``MongoTestCase`` to make sure we use
the test database.

Addresses #39
Pass Q object to filter queryset instead of dict

Use a Q object to build a query to filter our querysets.  This is
needed because we might be doing multiple queries based on the
``election_id`` field via a ``election_id__contains`` keyword argument
to ``QuerySet()``.  If we just build a keyword argument dictionary
with ``dict.update()``, then these query arguments will clobber
each other.

Also don't use ``get()`` to get specific filter arguments as it
returns ``None`` if the key doesn't exist.  We don't want
nonexistant filter keyword arguments to get passed to the query.

Addresses #39
More bakery tests

This is a checkpoint commit for some bakery tests.

Addresses #39
Declarative syntax for field name transformations

The raw field names come from mongo, but in some cases these
don't match up with the specs
at https://github.com/openelections/specs.

Implement a declarative syntax, similar to fields of Django
or MongoEngine models to translate the fields names from the
mongo names to the ones in the spec.

Use a similar mechanism to calculate fields that aren't stored
in the data store but can be easily calculated from the data,
for instance, extracting the year from a date.

Addresses #39
s/contest.updated/updated/ in baked data

Addresses #39