Create "change" matchers
Add matchers for detecting change in an expression.
Allow all of these syntaxes to be used:
expect { action }.to change { exp } # `exp` must be different between calls.
expect { action }.to change { exp }.from(x) # `exp` must be different, but expected to initially be `x`.
expect { action }.to change { exp }.from(x).to(y) # `exp` must start as `x` and change to `y`.
expect { action }.to change { exp }.to(y) # `exp` must change to `y`, but initially be something different.
expect { action }.to change { exp }.by(x) # `exp` must be different but by a specified amount between calls
expect { action }.to change { exp }.by_at_least(x) # `exp` must be different by as least a specified amount between calls.
expect { action }.to change { exp }.by_at_most(x) # `exp` must be different by at most a specified amount between calls.
Edited by Mike Miller