Introduce containers for assigns and expr_lists.

We use move semantics to ensure that ownership of the assignment pieces
is transferred to the assignment container so we don't have to destruct
them ourselves later.  However, we currently bomb out when trying to
assemble a list because we don't create a new list soon enough.