Make list builder use collection methods

Substantially cleaner, using more reified code. Should also be kinder to
the stack, and doesn't rely on exceptions to determine the end of the
list.