Add [Csv]Observations classes & sample data

The purpose of these classes is to make a convenient way to load observation
data (datetime, height) from a source such as CSV, and handle any
wrangling to ie numpy when required.

- `Observations` is an abstract-base-class defining a basic interface
  which all subclasses must adhere to.
- `CsvObservations` reads observations from an arbitrary-sized CSV with
  UTC dates. Note that it tries to avoid reading the file into memory.
- Tests for CsvObservations which capture its behaviour.

Included is an example data set from the NOAA with hourly observations
for the year of 2013.
Add test to capture the output of known analysis

This is a regression test to pin the behaviour of pytides doing a full
analysis for `example_observations_2.csv`

Note that it depends on the new `CsvObservations` class.
Fix typo `cooefficients` vs `coefficients`
Move `coefficients_to_xdo` etc out of class

They are helper functions, not class methods. Simplify the class.
Change OO relationship of Constituents

Previously:

   BaseConstituent
          |
 CompoundConstituent

But `CompoundConstituent` does *not* have an "is-a" relationship with
BaseConstituent (although it has common features).

This commit renames `BaseConstituent` to `Constituent` and introduces a
new `BaseConstituent` which provides any common functionality, and
dictates what functionality must be provided by the subclass.

      BaseConstituent  (new)
        |       |
Constituent   CompoundConstituent
Split constituent.py into a package

Split out BaseConstituent, Constituent and CompoundConstituent as they
are functionality quite different.

Move the actual constituent defintions into a new file
`constituent_factory` which will soon have factory methods for creating
a constituent [set] from a name.
Merge branch 'add-observations-class-and-tests' into tmp-master-new-data
Merge branch 'add-regression-test-for-example-tide-prediction' into tmp-master-new-data
Add some constituent factory functions

- `get_constituent(name)` - get a constituent object based on a name
  (allows aliasing constituents for different naming conventions)
- `get_constituent_set(name` - get a set of constituents, ie NOAA
Add ability to serialize a Tide to JSON

- add `json_encoding.py` module providing PytidesJson{Encoder,Decoder}
- add `serialize` and `deserialize` methods to `BaseConstituent` and
  `Tide` classes

Note that a constituent can be fully reconstructed from its name alone,
so we don't need to serialize derivative member methods like
coefficients.

For a Tide, we reconstruct the model (a numpy object) which comprises
triples of Constituent, Amplitude, Phase.