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.

the premise is that doing the following is a mistake, as the result of str() is already an encoded string (in python 2)
```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)
```