Modular encoding

Restructured Backends to make CF conventions handling consistent.

Among other things this includes:
- EncodedDataStores which can wrap other stores and allow
  for modular encoding/decoding.
- Trivial indices ds['x'] = ('x', np.arange(10)) are no longer
  stored on disk and are only created when accessed.
- AbstractDataStore API change.  Shouldn't effect external users.
- missing_value attributes now function like _FillValue

All current tests are passing (though it could use more new ones).
perhaps we need two different types of stores, one which does this sort of stuff (copying variable data like an on-disk store) and another for using as the return value from encoders/decoders.