Dirty commit
Prepare to write new consume() function
Old consume passes tests (but is not sufficient), moving on to implement consume2