Prevent implicit string decode in hmac-v4 handlers.

This is an attempt to fix #2033, but also fixes an important bug in hmac-v4 auth handler that prevents using it with non-ascii values.

```pycon
>>> str(u'\xf1'.encode('utf-8')).encode('utf8')
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-8-1b7de61b9d5b> in <module>()
----> 1 str(u'\xf1'.encode('utf-8')).encode('utf8')

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
```