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.
I 'd do it like this:
```
import guid
...
class PeerListener(guid.GUIDMixin):  # inherits from object already
    def __init__(self, ip, port, ctx, guid, data_cb):
        super(PeerListener, self).__init__(guid)
        self.ip = ip
        # no self.guid = guid
```
The reason for this abstraction is that in the future there will be a much more powerful `Identity` object in the place of `GUIDMixin` that will manage all aspects of identity. So, let's start using that from now.