Differentiate between built-in and custom options, custom ones get parens

@JakeWharton

This is deep yak-shaving territory.

If I understand the Google Protobuf Documentation on [Custom Options](https://developers.google.com/protocol-buffers/docs/proto#options), we need to wrap custom options in parens, but leave the built-in ones paren-free.

> ```protobuf
> import "google/protobuf/descriptor.proto";
> 
> extend google.protobuf.MessageOptions {
>   optional string my_option = 51234;
> }
> 
> message MyMessage {
>   option (my_option) = "Hello world!";
> }
> ```
> Here we have defined a new message-level option by extending `MessageOptions`. When we then use the option, the option name must be enclosed in parentheses to indicate that it is an extension.
For this to be in the constructor the enum has to be public as well. There's this weird disconnect where this library only knows about parsing and not the semantics of what some of these things mean. Maybe we just do `boolean isParenthesized` here instead?