- properly fail a Read() on a stream if we fail to parse a protobuf
- fix an ordering problem with the chttp2 transport global lock, whereby
a sequence of two operations could be swapped - this resulted in
slices being returned to the upper layers in the wrong order,
corrupting data
whenever appropriate so as to avoid any unintentional free-before-use
problems.
Potential performance issue: this triggers an additional allocation
for each Async call initiation, along with the cost of ref-counting
shared_ptr . But this is worth it for the additional safety provided
here without any change to the exposed C++ API.