Sign then Encrypt

Ok. Hopefully this addresses all the past feedback. I tried to simplify the PR and still get what we need in. This one is also a prerequisite for #840 as mentioned below. @Renelvon @gubatron take a look.
This troubles me a bit. I 'd like to `sign` the actual data and *then* apply encoding to the data and the signature. I 'd also like to keep the code together:
```
sig_data = json.dumps(data)
try:
    # Sign-then-encrypt
    signature = self.sign(sig_data)
    data = self.encrypt(
        json.dumps({
            'sig': signature.encode('hex'),
            'data': sig_data.encode('hex')
        })
    )
except Exception as e:
...
```
Personally, I don't see the reason for any hex enc-/decoding. Is it a JSON requirement?