Draft 14 framer stream

Updates for framer, stream, and connection.

Unfortunately, tests fail between these two commits.
I recommend squash-before-merge (so that git bisect works).

If you find commits are too large, please tell me so.  I'll work harder to make commits smaller.
I found what's wrong with me.  The line should read
'''
if frame is HEADERS or PUSH_PROMISE
  frames = encode_headers(frame) # this creates more than one frame
else
 frames = [frame]
end
frames.map { loop over frames }
```
L.338 should not pretend to be a common case.  It should be in an else clause.
Does this explain well?