The alignment of an object refers to the position of its local
origin with respect to its envelope. This module defines the
Alignable class for things which can be aligned, as well as a
default implementation in terms of HasOrigin and Enveloped,
along with several utility methods for alignment.

Alignable class

alignBy v d a moves the origin of a along the vector
v. If d = 1, the origin is moved to the edge of the
envelope in the direction of v; if d = -1, it moves to the
edge of the envelope in the direction of the negation of v.
Other values of d interpolate linearly (so for example, d =
0 centers the origin along the direction of v).

General alignment functions

align v aligns an enveloped object along the edge in the
direction of v. That is, it moves the local origin in the
direction of v until it is on the edge of the envelope. (Note
that if the local origin is outside the envelope to begin with,
it may have to move "backwards".)