Bugfix: crashes in displaying empty list of text

This was revealed in the Poker Space: any Variant with an empty list of
Aliases would crash.

The problem was subtle and nasty, and I had to fix a lot of things.
First of all, the TextType was calling .first, so it would fail to
render an empty list.

Second, the logic was just plain wrong in several places, winding up
with an empty ExactlyOne, which violates constraints.

Third, the way Collection.makePropValue worked has been an ongoing
headache.  Changed it to take any Iterable, which makes tons of code
easier to write.

Added new map() methods at several levels, which take a function that
converts one real value to another, and do all the unwrapping and
rewrapping to convert QValue to QValue.