Builder could have a 3rd Type parameter that extends Type.
class Builder<T extends Builder, P extends Builder, BT extends Type> (T: current type, P: parent Type, BT: built type)
class GroupBuilder<P> extends Builder<GroupBuilder<P>, P, GroupType>
class PrimitiveBuilder<P> extends Builder<PrimitiveBuilder<P>, P, PrimitiveType>
class MessageBuilder extends Builder<MessageBuilder, Void, MessageType>