We are now passing the entire RequestContext into rendering

We had been passing in the SpaceState, but I realized that this isn't
going to be enough in the long run.  Rendering gets into issues of
permission, so we also need to know the requester.  At which point, we
may as well just pass in the entire request, so rendering can be
performed with full information.
Checkpoint

Before I start throwing away a lot of type signatures that I believe are
causing more trouble than good.
Now generating Wikitext a bit more correctly.

But along the way, killed a fair bit of type safety.  I really need to
rework PropValue so that it is more intrinsically typesafe -- probably
by keeping a pointer to the relevant Collection.
Massive rework to remove the CT parameter

Finally got utterly sick of the problems being caused by type
parameters.  In retrospect, it's increasingly clear that I should have
been using abstract types all along.  So set out to remove the CT
parameter from Collection and everything upstream of it.

Along the way, rewrote PropValue to actually be much *more* typesafe.
I've been resisting PropValue having a direct pointer to its Collection
because in principle it shouldn't be necessary -- the Property knows
what Collection to use.  In practice, that is looking like a premature
optimization, which is causing huge code headaches.  So PropValue now
knows what Collection it it using, and can reason internally about the
consequences.

As a consequence, you are no longer allowed to simply create a PropValue
out of thin air; you always create it via the relevant Collection.  (And
in fact, each Collection defines its own subtype of PropValue.)

Also, gave up on using Option inside Collections, at least for now.
Making things <% Iterable is, in practice, a pain in the ass, because
I'm often converting from CT to Iterable in places where CT is
anonymous, so we can't make proper use of the implicit conversions.  So
made ExactlyOne and Optional use List under the hood -- vaguely less
safe, but much easier to use.  (And that is what Option converts to
anyway, when you ask it to look like an Iterable, so that conversion was
happening a lot internally.)

Introduced BootstrapCollection as a hack to deal with the startup-time
problem with setName.  Since setName was invoking ExactlyOne, which is a
Thing, which requires setName, we were getting illegal loops in object
initialization.  So introduced a "fake" collection, which is currently
used only for this case of hardcoded names.