Refactor protocol message parsing:

This replaces the stateful class parser with a stateless free function.
The protocol buffer message is parsed using a ZeroCopyInputStream.

* Invoke method is now a free function.
* Protocol handler doesn't need to derive from an abstract interface
* Only up to one message is processed at a time by the invoker.
* Remove error_code return from the handler's message processing functions.
* Add ZeroCopyInputStream implementation that wraps a BufferSequence.
* Free function parses up to one protocol message and calls the handler.
* Message type and size can be calculated from an iterator
  range or a buffer sequence.

Reviewers: @ximinez, @scottschurr 
Sorry that I didn't catch this sooner, but I think this is wrong. `out_pos_` is relative to `out`, and `out_end_` is relative to `std::prev(list_.end())` or whatever.  So `out_pos_` and `out_end_` are only comparable if `out_ == std::prev(list_.end())`, which I don't *think* is guaranteed to be true in this block.
Changing
```
                if (out_pos_ != out_end_)
```
to
```
                if (out_pos_ != out_end_
                    || out_ != std::prev (list_.end ()))
```
should be sufficient.