Use Rational instead of Double in ESpaced, EScaled.

This should eliminate rounding errors in round-tripping.
Further moves towards using rationals for spaces.