Major reorganization of backends

Changes:
- Backends are now in independent files (which should make it easier to keep
  track of them)
- netCDF4 and scipy are now optional dependencies
- added a new pydap backend (another optional dependency)
- cleaned up and sped up dataset encoding/decoding and XArray equality checks
  in the process of getting tests to pass

P.S. This is appears to be the world's most pathological netCDF file (also
available at the same URL as an OpenDAP dataset). I eventually gave up on
trying to get it to deserialize it consistently (pydap doesn't decode the
strings properly) but we might want to add it to our test suite anyways:
http://test.opendap.org/opendap/hyrax/data/nc/testfile.nc

Fun fact of the day: `np.allclose(np.int8(-128), np.int8(-128)) == False`.