Subset types

This adds a subset type, which declares a predicate on the `Raw` of a `Wrap`, together with basic infrastructure for dealing with it. See a really simple implementation of `NEList` based on it in the tests.