* Handle escaping in original json
* Replace conditional magic with proper json encoding call for key
* swap TestDecodeJSONWithEscaping with new TestEncodeJSONWithEscaping
* fix copy/paste typo
* Refactor Store interface to reflect operations SOPS performs
Previously the Store interface tried to mimic the Marshaler and Unmarshaler
interfaces. This was a mistake, as it meant Stores had no idea whether the files they
were loading were encrypted or not.
Partially fixes #334
* Add regression test for loading plain JSON file with binary store
**IMPORTANT** This breaks compatibility of the file format in 1.x for
json files, due to the version being encoded as a number in json files.
The fix for this is easy, however. One can either use a previous version
of sops in the range [2.0.0, 2.0.9] to edit the file, or one can manually edit
the encrypted file and change the version from a number to a string
Previously we basically hand-converted the metadata struct into a map
which we then passed to the stores. Now, we convert the metadata struct
to a "serialization" struct, which the stores serialize