Solved some bugs that happens from async sources...

for `flow.serial()`, the following code would throw an error:

```js
pull(
  pull.values([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),
  flow.async(),
  flow.serial(),
  pull.log()
)
```

Basically the problem here is by using the following code:

```js
output[0].end, output.shift().cb
```

The error happens when reading from async sources. I believe that it happens because of messing up with object references. Something internal for node.

regarding `flow.parallel`, the following code would throw an error:

```js
pull(
  pull.values([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),
  flow.async(),
  flow.serial(),
  flow.async(),
  flow.parallel(10),
  pull.log()
)
```

Again, some problems reading from async sources. Some reference errors.

And finally, I changed the way it does error handling.

If an error bubbles up from a reader/sink, the stream would end immediately. In case an error happened while reading readable, the error would be sent to the sink, but it won't stop executing.