Correctly handle signed/unsigned int32

This also handles the case where an int32 is varint encoded using more
than 5 bytes. Turns out that the output from protoc sometimes is that
way.

TBR=sigmund@google.com
BUG=

Review URL: https://chromiumcodereview.appspot.com//26840002