Tweaking the partitioning of BinaryUnion to minimize idle time.
1. CascadedPolygonUnion.BinaryUnion now uses a range partitioner that does each UnionSafe call by itself, so that we don't run into situations where all the threads are idle waiting for one thread to do work that they could be doing.
2. Reorganizing BinaryUnion so that the PCL / !PCL split is just how each version unions the inputs on each round.
3. Adding comments around the trickier parts and where this starts to diverge from JTS.
4. Minor tweak to ReduceToGeometries to save a List<T>.ToArray() call and a few unnecessary array copies when building the initial list.