Planning data-types.

This is a bunch of types and tests, that are required to do a
pure implementation of the planning algorithms.
I'm wondering whether it makes sense to have this return `Map[Name, List[(Partition, Partition)]]`, although it might depend a little on how it gets called/used.