Allocation stats type. This is used instead of RSpec (which was
used at first), because we need to track more stats. The actual
data can refer either to allocated, or available, etc. values
depending on the context. See also
computeAllocationDelta.

The failure values for this monad track the specific allocation
failures, so this is not a general error-monad (compare with the
Result data type). One downside is that this type cannot encode a
generic failure mode, hence our way to build a FailMode from string
will instead raise an exception.