Design change to simplify hmac.

It looks like we only needed to split `Auth` class. For `Encrypt` and `AuthEncrypt` splitting is not needed as even for the symmetric case there will always be two gadgets. For example, in case of AES. there is an encryption gadget and a decryption gadget. The only thing we will be adding by splitting is that the keys are equal for the symmetric case which has no added advantage beside complicating the design due to more classes.

For `Auth` class it is useful because for the symmetric case there is only one gadget. There are functions to generate authentication tag and verify it, both of them use the same gadget.