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.
Actually it isn't equivalent, it would basically call `cores.to_a`, which (surprisingly) gives different results than `[ cores ]` for some classes (eg. `Arel::Nodes::Union#to_a` returns a pretty strange array that isn't what we want). This could be `[ cores ].flatten`, but I don't think it's a huge win.