Provide the ASlot interface for heterolist [ASlot]

Normally if we want to summarize a Env.Parser value then we'll end up with a
list of Slots, but this is an invalid type since we'd really want

    [forall a . Slot a]

This is essentially the interface provided by the ASlot type. Further, we
use a few typeclasses to make it easy to access the information about Slots
or ASlots in the same way.

In order to provide this Slot-agnostic interface we introduce the X type---a
simple existential context.

All of this machinery could probably be massively simplified. It probably
should be too... Is there any reason at all to use X? It seems like it's
*always* an overly complicated method.