Support base64 encoding of bytes input for JSON blob types.

This pull request modifies the code added in ffcef5f to also support
arguments passed in as bytes, such as those you might encounter when
using KMS.

See this related issue: boto/boto3#31

```python
import boto3
kms = boto3.client('kms')
result = kms.encrypt(KeyId='some_key_id_redacted',Plaintext='my name is bob')
kms.decrypt(CiphertextBlob=result['CiphertextBlob'])
```

Since the JSON data for serialization tests doesn't support specifying
bytes as input, I've added a new test class to cover this case.

cc @jamesls, @kyleknap
We are now no longer consistently handling blob types across protocols, as this logic is only in the JSONSerializer, and this is now duplicated from the query protocol.  I think we should refactor this so that all the protocols can share a similar blob serializer.  There's even a TODO note in the RestXML serializer specifically about this point.