Reversing a singleton list is a no-op.
Reversing a reverse gives the original.
Serves as a specification for reverseOnto.
The reverse of an empty list is an empty list. Together with reverseCons,
serves as a specification for reverse.
The reverse of a cons is the reverse of the tail followed by the head.
Together with reverseNil serves as a specification for reverse.
Reversing an append is appending reversals backwards.