Refactor Crypto.mac and AuthorizationHeader.authenticate

- Crypto.mac now returns an instance of Crypto::Mac
- AuthorizationHeader.authenticate uses normalized request string from Crypto::Mac instance
- AuthorizationHeader.authenticate uses Crypto::Mac comparison method which does constant time comparison
Refactor Crypto.hash to return instance of Crypto::Hash
Refactor Crypto::Mac
Refactor Crypto.ts_mac to return instance of Crypto::TSMac
Refactor Crypto.bewit to return instance of Crypto::Bewit
Refactor bewit authentication to use Crypto::Bewit