Fixes HMACFileReader close function
Adds context manager support for with statement to HMACFileReader
Fixes file not being closed in KeyValueStore._get_file

The `KeyValueStore._get_file` method consumes a file from the store source but it does not close it after reading it.

```python
def _get_file(self, key, file):
    source = self.open(key)
    # reading the file ..
    # not closing it! ..
```

It seizes the problem by using the `with` statement.

```python
def _get_file(self, key, file):
    with self.open(key) as source:
    	# reading the file ..
```

This approach does not work for file-like objects lacking the context manager implementation (the `__enter__` and `__exit__` methods), such as HMACFileReader.

An alternative and simpler (but uglier) method would be to check wether the file-like object has a `close` method, and then call it:

```python
def _get_file(self, key, file):
    source = self.open(key) as source
    # reading the file ..
    try:
        source.close()
    except AttributeError:
        pass
```

Or actively check for the `close` method existence:

```python
def _get_file(self, key, file):
    source = self.open(key) as source
    # reading the file ..
    if hasattr(source, 'close'):
        source.close()
```
Adds compat module with helpers for py3 compatibility
Moves from str to bytes

The 'str' type is now 'bytes' in Python3.
Python2 is working with 'binary blobs' as values, based on strings and `StringIO`.
Python2/3 version uses bytes and `io.BytesIO`.
Fixes syntax changes
Fixes incompatible imports