[WIP] Optimize startup time

The time to run jrnl is noticeable and clocks in at almost 300ms on my machine (using `time jrnl --help`, so almost no real I/O). This is mainly due to the imports of the keyring and crypto modules. With this PR, that refactors the `Journal` class and defers keyring imports, I can run jrnl in about 160ms. 

A positive side effect (at least from my point of view) is the slightly cleaner separation between the in-memory journal model and the storage mechanisms. But YMMV.
Can we move this method to `util`? I love the modularisation of different back-ends, but then there's no reason to privilege this module with the open method for all other back-ends.