Use descriptor structs to deterministically create descriptor dumps
We should make router_dump_router_to_string() and extrainfo_dump_to_string() deterministic transforms of routerinfo_t and extrainfo_t.
At the moment, these functions access options, internal state, and statistics files. If all those accesses occurred in router_build_fresh_unsigned_{router,extra}info() then the dump functions would be a lot easier to test.