Some refactoring for 2.0

List of changes:
- Removed the ``ConcurrencyMiddleware`` (https://github.com/msiemens/tinydb/issues/18)
- Optimized cache searching for ``SmartCacheTable``
- Less conditionals using the ``float('nan')`` in place of a falsy cache size
- Replaced copy-pasted code with ``super(...)``
- ~~Use ``dict.items`` instead of ``data[eid]``~~
- Embrace EAFP when doing ``table.update`` and ``table.remove`` for smart caches
- Fixed a bug where the Element isn't valid when an empty document is inserted
Setting an instance variable is different from setting the class variable, i.e.

```python
def write(self, data):
    self.memory = data
```

Does not affect the ``MemoryStorage.memory`` attribute. But I'll test it as you said, just in case it doesn't work on previous Pythons.