Use a more basic encoding for lists.

This seems to perform better, and since it's just pairs, I'd be
more comfortable adding some internal representation for them at
some point (because better to optimize lists and pairs than just
lists.)
Use match() for printing; match I better.

This extends the match() API to be able to handle non-Ref expressions,
for the sake of the output methods.

It also allows identities to be matched *either* by I or Lxx, Laa, etc.
Bind pairs aggressively.