Handle mask_and_scale ourselves instead of using netCDF4

This lets us NaNs instead of masked arrays to indicate missing values.
Save serialization info to XArray.encoding
Changes in response to github comments
Serialize/de-serialize strings
More comprehensive Dataset read/write tests

Miscelaneous bugs in mask/scale serialization also fixed.
CF Time coordinates are handled using encodings.

Datasets now have an optional constructor argument which
determines whether CF-variables are converted or stored raw.
Fixed my issues with Alex's commit
Reverted an accidental change to utils.dict_equal
Merge pull request #20 from akleeman/mask-and-scale

Handle mask_and_scale ourselves instead of using netCDF4