Sign then Encrypt

Just as a heads up this is wacky as shit because of some weird merging and rebasing…I'm still looking at it but if you see anything odd please let me know.
This should be stronger; you don't want `self.pub` to be `False` or `None` or `''`, so just write:
```python
assert self.pub, 'No public key for this peer is set'
```