Support enum and enum value options

@JakeWharton @swankjesse @adriancole

This adds support for options on enum types and enum values:

```
enum FooBarBazEnum {
  FOO = 1 [enum_value_option_1=17];
  BAR = 2 enum_value_option_2=true];
  BAZ = 3 [enum_value_option_1=18, enum_value_option_2=false];
}

extend google.protobuf.EnumValueOptions {
  option enum_option = true;
  optional int32 enum_value_option_1 = 70000;
  optional int32 enum_value_option_2 = 70001;
}

extend google.protobuf.EnumOptions {
  optional bool enum_option = 71000;
}
```

resulting in:

```
  public enum FooBarBazEnum
      implements ProtoEnum {
    FOO(1, 17, null),
    BAR(2, null, true),
    BAZ(3, 18, false);

    public static final EnumOptions ENUM_OPTIONS = new EnumOptions.Builder()
        .setExtension(Ext_custom_options.enum_option, true)
        .build();

    private final int value;
    public final Integer enum_value_option_1;
    public final Boolean foreign_enum_value_option_2;

    private FooBarBazEnum(int value, Integer enum_value_option_1, Boolean foreign_enum_value_option_2) {
      this.value = value;
      this.enum_value_option_1 = enum_value_option_1;
      this.foreign_enum_value_option_2 = foreign_enum_value_option_2;
    }

    @Override
    public int getValue() {
      return value;
    }
  }
```

I added a `--enum_options` flag that allows the caller to specify which enum value options to generate code for.