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).
The edge case I was after is the case were there is a trivial index, but it isn't used by any variables.  In that case excluding it would mean the dataset wouldn't get round-tripped correctly (that be a good unit test).