Make union/except/intersect chainable as SelectManager

Fixes #118.

This is the same as #239, but against master instead of 4-0-stable. It would be really nice to get this in so we don't need to keep freshening it! Or if there's a reason it isn't being merged, feedback would be great.
Are there any that aren't *blatantly* wrong with this formulation? Surely anything currently accessing `left`/`right` is implicitly assuming that's enough to address all the children?