Datasets now use data stores to allow swap-able backends

    Data objects now have a swap-able backend store.
    
    - Allows conversion to and from: NetCDF4, scipy.io.netcdf and in
      memory storage.
    - Added general test cases, and cases for specific backend stores.
    - Dataset.translate() can now optionally copy the object.
    - Fixed most unit tests, test_translate_consistency still fails.