add end test
add error test
add length test
update test runner
use @vvo's suggestion to use Object.defineProperty
fix bug where end could be emitted 2x in next()