Real-time multiplayer initial commit

Simple matchmaking, synchronous multiplayer PVP, flags!

Rough matchmaking is under the game menu multiplayer tab, for ladder
games only.  After creating a 2-person game there, you can exit that
modal and real-time cast to play against each other.

If you’re the first person to cast, you’ll sit at the real-time level
playback view waiting until the other player casts.  When they do, you
both should start the real-time playback (and start placing flags like
crazy people).

If in a multiplayer session, the real-time simulation runs the players’
code against each other.  Your multiplayer opponent’s name should be up
near the level name.

Multiplayer sessions are stored completely in Firebase for now, and
removed if both players leave the game.  There’s plenty of bugs,
synchronization issues, and minimal polish to add before we push it to
master.
Real-time multiplayer subscription schemas
Real-time multiplayers to 'coding' after playback
PVP waiting screen in real-time view
Removed a log.
Optimized level serialization a bit more to make placing and moving thangs around in the level editor more fluid.
Missed committing part of previous fix.
Folderizing thang types in the level editor.
Fixed editor config change event schema.
Thangs tab now maintains the order of thangs independently of how thangs are reorganized into folders.
Some tweaks and fixes to the folderized thangs in the level editor.
Merged master into feature/realtime-multiplayer; looks good.
Merge branch 'feature/realtime-multiplayer'
Wrapping up work on the folderized thangs treema in the level editor.
Disabling an error that occurs on the dev server with the partial db.
Making the thangs column in the level editor hidden by default again.
Added a new searchStrings property to level components to improve their search.
Fixed #1511
Fixed a few tome / canvas resizing bugs.
Fixed bug with hero levels not loading inventory. (Might not be in line with the performance that 975c6a was going for.)