Generate PartialEq for messages

#[deriving(PartialEq)] cannot be used, because `cached_size` field
should not be used in `PartialEq` implementation.
Store cached_size in message

This is how serialization is implemented in C++ version of protobuf.
Message serialization no longer requires allocation, buf message
struct now contains extra field.