Internal refactor of XArray, with a new CoordXArray subtype

This allows us to simplify our internal model for XArray (it always cached
internally as a base ndarray) and supports some previously tricky aspects
involving pandas.Index objects. Noteably:
1. The dtype of arrays stored as pandas.Index objects can now be faithfully
   saved and restored. Doing math with XArray objects always yields objects
   with the right dtype, so `ds['latitude'] + 1` has dtype=float, not
   dtype=object.
2. It's no longer necessary to load index data into memory upon creating a new
   Dataset. Instead, the index data can be loaded on demand.
3. `var.data` is always an ndarray. `var.index` is always a pandas.Index.

Related issues: #17, #39, #40.
Fix copy for CoordXArray
Restore handling of dtype=object arrays in encode_cf_variable
Test XArray properties
Fix datetimeindex components (with new test)
Further fixes to datetimeindex components
Fix coordinate math with DatasetArrays

Note: this was already a bug, but it's more cleanly fixed with this patch.
Fix indexing_mode for CoordXArray
Another fixing to indexing_mode for CoordXArray
More indexing fixes
Merge pull request #54 from akleeman/index-types

Internal refactor of XArray, with a new CoordXArray subtype