Handle all wildcards (`{*}`, `[*]`, and `.*`).

* `{*}` requires map/reduce
* introduce `Splice` for wildcard projections
* `Wildcard` is replaced by `Splice(None)`
* `{*}` and `[*]` expand to the equivalent functions
* `namedProjections` doesn’t name flattening of the entire relation

The one part of this I’m not totally happy with is how `namedProjections`
is called in compiler.scala. It seems overly complicated.