optimize varint decoding
optimize varint decoding

Copies the varint decoding optimizations from the cpp protobuf
implementation. Performance is significantly improved:

 name                  control ns/iter   variable ns/iter  diff ns/iter   diff %  speedup
 decode_varint_small   1,165 (686 MB/s)  664 (1204 MB/s)           -501  -43.00%   x 1.75
 decode_varint_medium  4,574 (174 MB/s)  1,213 (659 MB/s)        -3,361  -73.48%   x 3.77
 decode_varint_mixed   5,134 (155 MB/s)  1,354 (590 MB/s)        -3,780  -73.63%   x 3.79
 decode_varint_large   8,832 (90 MB/s)   1,675 (477 MB/s)        -7,157  -81.03%   x 5.27

danburkert/prost,danburkert/prost