add `select` method to cast collections

makes it easy to generate sub-collections, e.g. from a list of station numbers

also make castwhere raise a LookupError when no cast is found