Fix the following 2 errors when running on Python 3.8
```
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/yen/Projects/nvchecker/nvchecker/main.py", line 33, in main
if core.process_common_arguments(args):
File "/home/yen/Projects/nvchecker/nvchecker/core.py", line 46, in process_common_arguments
nicelogger.enable_pretty_logging(
File "/home/yen/Projects/nvchecker/nvchecker/lib/nicelogger.py", line 93, in enable_pretty_logging
formatter = TornadoLogFormatter(color=color)
File "/home/yen/Projects/nvchecker/nvchecker/lib/nicelogger.py", line 16, in __init__
super().__init__(self, *args, **kwargs)
File "/usr/lib/python3.8/logging/__init__.py", line 589, in __init__
self._style.validate()
File "/usr/lib/python3.8/logging/__init__.py", line 441, in validate
if not self.validation_pattern.search(self._fmt):
TypeError: expected string or bytes-like object
```
```
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/yen/Projects/nvchecker/nvchecker/main.py", line 42, in main
ioloop.run_until_complete(s.check())
File "/usr/lib/python3.8/asyncio/base_events.py", line 589, in run_until_complete
return future.result()
File "/home/yen/Projects/nvchecker/nvchecker/core.py", line 177, in check
self.print_version_update(name, result)
File "/home/yen/Projects/nvchecker/nvchecker/core.py", line 190, in print_version_update
logger.info('updated', name=name, version=version, old_version=oldver)
File "/home/yen/.local/lib/python3.8/site-packages/structlog/_base.py", line 191, in _proxy_to_logger
args, kw = self._process_event(method_name, event, event_kw)
File "/home/yen/.local/lib/python3.8/site-packages/structlog/_base.py", line 151, in _process_event
event_dict = proc(self._logger, method_name, event_dict)
File "/home/yen/Projects/nvchecker/nvchecker/slogconf.py", line 48, in stdlib_renderer
getattr(logger, level)(
File "/usr/lib/python3.8/logging/__init__.py", line 1441, in info
self._log(INFO, msg, args, **kwargs)
File "/usr/lib/python3.8/logging/__init__.py", line 1572, in _log
fn, lno, func, sinfo = self.findCaller(stack_info, stacklevel)
TypeError: findCaller() takes from 1 to 2 positional arguments but 3 were given
```
To fix the second issue, I backported relevant CPython changes [1] to slogconf.py
Test command: `python3.8 -c 'from nvchecker.main import main; main()' sample_source.ini`
[1] dde9fdbe45 (diff-c11fc567cf5b6e518eb855c23b5599bcR1400)
keyfile is not part of cache keys so the expectations are wrong.
We don't make it part of cache keys because we don't expect keyfile to
affect the version as long as we can get it.
so that different entries can refer to a same software without much overhead.
This is needed because entries may be generated, and only nvchecker can
tell if two entries are expecting the same result because the name may
or may not be relevant.
Closes#81.