Add MACContext and switch HMAC and CMAC to use it.

Fixes #1319.

Thoughts?
You'll need to keep `CMACContext` around as an alias to this for backwards compatibility.