Refactor horizontal velocity to use an abstract AxisVelocity class.

AxisVelocity will later represent per-axis velocity accounting for both
directions along an axis.

There have been no changes to the functionality, so it still only
accounts for positive values.
Spaces.