An ArgumentExpectation[R, I, A] represents an expectation on input I arguments
for environment R that returns an effect that may produce a single A.
An Expectation[R] is an immutable tree structure that represents
expectations on environment R.
An Invocation[R, I, A] models a single invocation of a Method[R, I, A],
including both the input to the method invocation I and the output from
the method invocation A.
A Model[R, I, A] represents a capability of environment R that
takes an input I and returns an effect that may produce a single A.
A Proxy provides the machinery to map mocked invocations to predefined results
and check some constraints on the way.
A ReturnExpectation[-I, E, +A] represents an expectation on output that given input arguments I
returns an effect that may fail with an error E or produce a single A.