Implement bags using sets instead of lists; add set operations

[peter]
This is implemented in the course of working on the magic table scraper.

The change is needed so that we can add and subtract bags from one another, to have exclusions of cells from a bag.

Since the underlying data structure has no notion of ordering, we modify the iteration interface so that iteration occurs in the "intuitive" way, i.e, left-right, top-bottom.

Lots of tests added.

We'll be merging when it goes green on travis.