Fix Breathing crash caused by trimOverlaps leaving pieces with zero area.

The "bottom less than top" and "left less than right" constraints were
actually implemented as "less than or equal" constraints.  Add epsilon
to force the inequality, which suffices to ensure that we don't end up
with zero-width or zero-height pieces (which later crash the
breather).
Add Fraction.max() method.
Improve formation breathing in the presence of "do nothing" movements.

Split "do nothing" movements at every "moment" so that they can be
breathed as necessary.

Otherwise a "centers trade" from an EIGHT_CHAIN_THRU would result in
the centers splitting the ends' handhold, because the ends "didn't move"
even as the centers' formation increased in size.

Don't count trailing "do nothing" movements in the list of moments,
because the 1-beat dance time of a "do nothing" is completely arbitrary.
Including it may cause other formations to be breathed at inopportune
times. Add `ds.lastMovement()` to query the length of a dance path
sequence, ignoring the trailing "do nothings".

Similarly, in `DanceState.syncDancers()` extend an existing "do nothing"
where possible instead of creating a new one.  This avoids letting the
default 1-beat dance time leak through into the list of movements.
Improve definitions of flutterwheel and partner trade.

I'm working on a branch that breathes a whole lot less during call
evaluation, and it turned up problematic positioning in these calls.