Differentiate between value types: add int, enum, boolean

@JakeWharton Updates the protoparser to sniff out more kinds of values

Notes:

- The `EnumType.Value.anonymous` exists to help quote enums. We know the value is an enum, but we don't necessarily know all the rest of the detals.

- I would have also made this PR against the Square master, but I branched off of the previous `add-builders` and the tests had already been refactored. To avoid a merge conflict later, just doing a branch-to-branch merge.

Mostly just to avoid a ton of indenting. I'd also say if the indentation level is low it's less cognitive overhead on figuring out through which conditionals you are "in". When they're arranged linearly it just seems easier to parse rather than tracking all the "else"s of the surrounding blocks.