Previously we call fr.ReadFrame() in go routine, but it is potentially
dangerous since fr.ReadFrame() doc says that the returned http2.Frame
"is only valid until the next call to ReadFrame."
This commit avoids the above problem by reading frame at a time and
process it completely before calling fr.ReadFrame().
5.4: We submitted DATA to non-open stream, thus we expect
STREAM_CLOSED error code.
6_10: We should not set END_STREAM flag to HEADERS, otherwise
following DATA is treated as stream error (STREAM_CLOSED) because
half-closed (remote) and no GOAWAY situation arises.
6_9: From the specification, WINDOW_UPDATE with increment of 0 to a
stream causes stream error, not connection error. Although,
implementation may choose connection error at their will.