Added comment about needing locks before calling
MUPD: need to check feasibility *after* locking

MUPD was causing a feasibility error because market feasibility was
being checked before getting a market lock, which meant the market could
be feasible, but after the lock might not be feasible anymore, in which
case allocations failed with threads.  Moving the feasibility check to
after the big market write lock fixes that.
Member::Lock: member lock addition, lock takeovers

Added the ability to add a new member to a lock (which might require
releasing the existing lock, if the new member can't be locked right
away).

Also added the ability to transfer one lock's members to another.  This
requires no new locking attempts, but does require that the two locks
have the same status (i.e. same read/write, and same locked/released
status).
Member::Lock: added member removal

Added the ability to remove a subset of members from a Lock.  This
returns a new Lock consisting of the removed members--if the returned
lock isn't used, it is released immediately, thus freeing the lock on
the given members.

This also involved converting Lock's internal vector implementation to a
multiset, which required substantially reworking the locking code into
using iterators on the multiset instead of indices.
Stepper: added a max_step (defaulting for 0.5)

The default max_step means whatever is being stepped increases by (at
most) 50% and decreases by (at most) 33% in a single step.  Without
this, initial conditions far off the equilibrium have a tendency to
massively overshoot the equilibrium.
Comment/doc updates
ex/q-m: increase iterations to 300
Updated lock-test for eris interfaces changes
Firm/Mkt Reservation: state track via enum

Converted Firm::Reservation and Market::Reservation state tracking to a
single enum class (added to eris/types.hpp) instead of the dual bool
(avoiding the "don't look at `completed` if `active` is true" design
problem.

This change also includes a bug fix for destruction: the market
reservation destructor was checking !completed which is wrong in so many
ways: it should have been checking just 'active' (not even '!active')
instead.  Using a single enum state revealed the bug.
Member::Lock::remove(member): added missing method

The method for removing a single member was in the .hpp but not
actually implemented in the .cpp.
Market: code simplification

Lock with a vector instead of a single member used to be pointless, and
is now actually worse for performance (since Lock no longer uses a
vector).
Firm: documentation typo

Fixed copy-and-paste typo from when Market locking code was copied into
Firm.
MUPD overhaul: less held locking, more redos

- Made locking more granular: we only lock markets when needed now,
  instead of getting a huge lock of all markets.
- Markets becoming infeasible is a bigger problem now: other agents may
  be participating in markets while they aren't locked because of the
  above.  Thus added an exception for handling this; when the exception
  gets thrown, MUPD redoes its optimization.  Since it isn't being hit
  all that much, this, combined with the weaker locking behaviour,
  improves MUPD performance noticeably.
Removed commented-out, unneeded include
QFStepper steps every 3 periods

Every period was pretty messy--every 3 seems to do better
InterStepper: when jumping, reduce step size

Typically a jump happens because the last step was too big and overshot
whatever we were aiming for, so reduce step size when jumping to
hopefully get back on track.
Fixed negativity error exceptions from MUPD change

Cancelling a reservation (which new MUPD code does sometimes) was not
quite working because the tolerance was too low and thus negativity
errors would result.  This was supposed to be handled in the Firm
already--and indeed it was within transfer(), which used transferApprox
with its own epsilon, but release() wasn't passing epsilon and was
getting Bundle's default (1e-13) instead of the desired 1e-10.