Instead of creating a nested map on demand for the nested room infos,
move to an extendable tree structure described by explicit types. This
makes the information structure clearer and allows for easily adding
information at various levels in the future.
This makes the program actually work for cases, where the client API is
under a different subdomain (like "matrix.hamburg.ccc.de" with the user
id having "hamburg.ccc.de").
Introduce command-line flags for config options with the added benefit
of getting a help output, expose more config options to be directly
configurable, prefix all environment variables with "MRVC", adjust
config option naming to better reflect their purpose and add validation
to ensure some config options got explicitly set.
With this new compare function the version strings seen in the output
get sorted properly. So something like "1.89.0" gets sorted before
"1.135.0", not after. It also makes the room versions count up properly
with the "unknown" version getting placed at the beginning.
Parallelizing the retrieval of the server version information decreases
the program runtime, especially since the impact of slow responses and
timeouts is lowered greatly.
Add first version of mrvc (max room version checker) - a tool for
determining how many members support which maximum room version for a
given Matrix room.