Big changes synced with golang/protobuf
This includes all the changes from golang/protobuf
https://github.com/golang/protobuf/releases/tag/v1.1.0
This includes all the changes from golang/protobuf
https://github.com/golang/protobuf/releases/tag/v1.1.0