Replace a whole bunch of special-casing for POST body parameters with the same
logic as is used for response objects: represent all but the top-level as
tables.
The 'typeof' info on the events was perpetrated by a fearsome hack which I
broke. I don't want to fix it any better right now, so just make the hack work
and pull the rug over.
Move 'inherit_parents' calls up to before get_json_schema_object_fields so that
things can inherit their types via allOf declarations. Also make it possible to
inherit descriptions.
Remove redundant 'include_parents' parameter, which was never used.
Move 'resolve_references' call out of get_tables_for_schema (it was redundant
sometimes and not others, and now it is clearer who has responsibility for it)
As a side effect, I got rid of all of the horrible symlinks and just put
in all of the proper relative paths. Because the horrible symlinks were
horrible.
A bunch of related fixes to the code for parsing the state and API yaml files:
1. Some of our objects are {key: {key: value}} - style nested key/value
dictionaries. Handle this by refactoring get_json_schema_object_fields so
that such objects are handled wherever they appear, rather than when they
are just subproperties of a 'proper' object.
2. Fix multi-level inheritance (so an object can have an 'allOf' property which
can successfully refer to an object which itself has an 'allOf' property).
3. $ref fields in event schemas weren't being expanded correctly
4. sort type tables breadth-first rather than depth-first so that the ordering
in complex structures like the /sync response makes a bit more sense.
Allow columns to stretch if they end up with wide content.
Apart from the hassle of having to manually update the calculations, having the
columns wide enough to hold the widest thing they might ever have leads to
tables with lots of whitespace in the results.