Add MACContext and switch HMAC and CMAC to use it.

Fixes #1319.

Thoughts?
Ok, so we have a few inconsistencies. HMAC exposes `self.algorithm` as a public property. That's essentially the HashAlgorithm used for the HMAC. CMAC has a similar property which is the BlockCipherAlgorithm that's being used but it's current a private property (`self._algorithm`).

In addition to that, I added `def verify(self, signature)` to the MACContext interface. This is something that's missing from both CMACContext and HashContext (because hashes do not have a verify() method.)

So here is what I propose,

1. Make CMAC's `self._algorithm` public.
2. Add `def verify(self, signature)` to CMACContext and alias it with MACContext.