extracted ReadStream state manager, fixes #82

Also #83

Too much magic going on with `this._status`, extracted it to a separate state object (something like a state machine) with explicit logic for what can happen in the different states.

Is this lame? I'm just sick of managing readable stream state under complex async conditions so I figure being clear & explicit about it is the safest way to go.