ENH: Revamped Dataset update methods

New in this patch:
- Added an `update` method to override variables and attributes.
- Unified `__init__`, `__setitem__`, `update` and `merge` to call the same
  private methods/functions for processing dictionaries of variables.
- If a variable is provided as a `DataArray`, it is automatically unpacked
  into variables including all its coordinates.
- It is now possible to alter the size of existing dimensions via
  `__setitem__` or `update`.
- Removed "decode_cf" as a parameter to `Dataset.__init__`. Now this flag
  can only be used in `Dataset.load_store`.
- Generally cleaned up dataset.py.

Replaces PR #62