Add MACContext and switch HMAC and CMAC to use it.

Fixes #1319.

Thoughts?
You can drop the `CMACContext` bit here, since that's the same as `MACContext`