Add LRU caching to tzoffset, tzstr and gettz

Caching had been switched to use `weakrefs` in order to reuse instances if they
are still alive, by #635. This introduces a LRU cache to the mentioned functions
in order to prevent the instances created by them getting dealloc'd and alloc'd
unnecessarily, in situations like this:

```python
for i in range(100):
    tz.gettz('America/New_York')
```

`tz.tzoffset` and `tz.tzstr` get a LRU cache with size of 8.
`tz.gettz`'s cache starts with 8 by default and can be modified by the
introduced `tz.set_cache_size(int)`

Closes #691
3 files changed