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).
I tried that
```
In [5]: xrange(10).start
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-689f454760fa> in <module>()
----> 1 xrange(10).start

AttributeError: 'xrange' object has no attribute 'start'
```
am I missing something?