ElementEdge.description()
ElementEdge.is(): resolves a constraint to a value
Rename: constraints/ --> descriptors/
YPosition class
XPosition class
assert.equal provides better error when types are different
XPosition.equals() accepts a number
YPosition.equals() accepts a number
ElementEdge uses XPosition and YPosition value objects
XPosition and YPosition merged into single Position class
Position.diff(): human readable difference in positions
Position.diff() fails fast when comparing opposite dimensions
Position.diff() is comparable to a number
Position.equals() uses .diff()
ElementEdge uses Position.diff()