Allow to query the network ID and entity from the message ID regardless of the underlying store used.
This allows for other implementations that aren't based on a filesystem.
Introduce a messageStore type, which will allow for multiple implementations (e.g. in the DB or in-memory instead of on-disk). The message store is per-user so that we don't need to deal with locking and it's easier to implement per-user limits.