Stricter validation in Message#initialize for non-existent fields

My colleagues and I noticed that `Message#initialize` and `Message.encode` silently drop fields that aren't actually part of the proto. This PR makes the validation explicit, and throws a `Protobuf::FieldNotDefinedError` in that situation.

Alternatively, we could introduce backwards compatible `#initialize!` and `.encode!`. However, I think it would be a big win for this gem to enforce the schema of the protobuf to this extent.

Please take a look, and thanks for all your work for this Gem!

cc @tamird
The `encode` class method [uses the message initializer](https://github.com/localshred/protobuf/blob/master/lib/protobuf/message/serialization.rb#L15-L17), though. Unless I misunderstand your comment.