Database.is_closed() returns incorrect value sometimes
How would moving that outside the block change things? if I am understanding the code correctly:

Currently if the call to `self._close(self._local.conn)` raises an Exception then `with self.exception_wrapper` will `__exit__` and `self._local.closed = True` will never be called.

By moving `self._local.closed = True` out of the `with` it should always get executed. The exception_wrapper simply wraps the exceptions raised by the database driver to a "peewee" equivalent exception. It doesn't suppress the exception. Thus you can catch a peewee.OperationalError rather than needing to catch both psycopg2 / sqlite3 if you were so inclined, e.g. Okay, then perhaps something like this:

```python
def close(self):
    with self._conn_lock:
        if self.deferred:
            raise Exception('Error, database not properly initialized '
                            'before closing connection')
        try:
            with self.exception_wrapper:
                self._close(self._local.conn)
        finally:
            self._local.closed = True
``` Are you intending to catch the `InterfaceError` yourself and ignore it? b06a9b0
I sometimes get this:  `psycopg2.InterfaceError: connection already closed` and can't seem to track it down.  But I was able to determine that Database.is_closed() returns an incorrect value sometimes.

I looked in peewee.py at the close() method of the Database class and would like to propose a small improvement:

Currently:
```
with self.exception_wrapper:
    self._close(self._local.conn)
    self._local.closed = True  # this line is inside the with
```
Proposed:
```
with self.exception_wrapper:
    self._close(self._local.conn)
self._local.closed = True  # move it outside the with (should it go back 1 or 2 levels??)
```