The relay will now fail to start if an invalid config file is
explicitly provided. If the file was read implicitly from the current
directory, a warning will be provided, but the relay will still startup.
This is inspired by the work of
v0l (https://github.com/v0l/nostr-rs-relay/).
A new trait abstracts the storage layer with an async API. Rusqlite
is still used with worker threads, but this allows for Postgresql or
other backends to be used.
There may be bugs, this has not been rigorously tested.