Install the lz-string package and save to dependencies
Use decompressBody middleware
require lz-string module
Initial decompressBody middleware

We check for the existence of req.body.compressed and if it exists, we
decompress all keys in req.body.compressed.

req.body.compressed should be a string of comma separated keys with no
whitespace.
Compress the content for each POST to /<url>/save

TODO: do this conditionally
Only compress if the useCompression setting is true

This removes the overhead of compress/decompress for every save request
Abstract the compression to a separate function

This enables us to easily compress other pieces of data in the future.

The order of arguments is `keys` then `obj`, so we can curry the
function, to create a generic `compressContent` function, for example.
Use the compressData abstraction instead of inline logic
Send an object as data for POST /save not a queryString

We want to send an object here as to make it easier to compress the keys
when it comes to it.
Conditionally compress data for POSTs to /save

We compress the `html`, `css` and `javascript` here as these were the
bits causing issues when running through WatchGuard HTTP Proxy.
Use reduce to build data object from $form.seralizeArray

We use reduce here because it is less code a more readable than the
previous forEach wrapped in a closure, the logic stays exactly the same
and the superfluous brackets and function keyword don't clutter it up.
Rename compressData to compressKeys

compressData is a misleading function name and compressKeys is a more
accurate description of what this functions does: taking a list of keys
and an object, this function will compress the values of the keys on
that object.
add lz-string library to repo
add lz-string to the scripts list
Merge pull request #1548 from jsbin/feature/encrypt-save-post

Feature/encrypt save post