Collection Skeletons: Declarative Abstractions for Data Collections