Start of importer app/module

Adds initial support for parsing a file and storing each row as
database entry.

This commit also demonstrates how validation could work. The base
validations check file-level restrictions such as:
  - The file must not be empty
  - The file must have a 'point x' and a 'point y' column
  - Fields present in the file but not recognized as a valid field
    are considered errors

The next stage is to do row-by-row validations.

Currently there is no front end interface (everything being checked
by running the tests)
Start of row-level validations and tests

This commit contains the basic info required to validate errors on
a given row and currently handles all of the main error cases in
the scoping document.

It does not yet handle Species DBH/Height and Trees Nearby restrictions
(stuff that is non-fatal and goes on the tree watch list)

In addition, none of the choices fields are handled (yet)
Add support for 'warning' level validations

- Species height max
- Species dbh max
- Nearby trees
Refactor data type validation
Refactor validation to be more uniform

Specifically, species validation was a bit of an outlier. It has now
been brought back into the fold.
Minor renaming of main validation method
Add some integration level tests and start views

Add in two new views (no celery yet though):
- process_csv(request)
  Returns {'id': < import event id > }

  Right now processing is done synchronously, but in
  the future the id token will be used to reference the
  running job

- process_status(request, import_id)
  Return json with the current status of the import

  If there were no errors at all:
  {'status': 'success'}

  If there were file-level errors:
  {'status': 'file_error',
   'errors': [{'msg': ...
              'fatal': ...
              'data': ...,
              'code': 2},
              ...]}

  If there were row-level errors:
  {'status': row_error',
   'errors': {<rowid>:
                 [{'msg': ...
                   'fatal': ...
                   'data': ...,
                   'code': 2},
                   ...],
              <rowid>: ...}}
Tree/plot import backend complete with tests
Move validation logic to row-models and refactor out constants
Merge pull request #99 from ahinz/wip/importer

Start of importer app/module