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.

Move `-1` to a `public static final int UNKNOWN_TAG` on this `Value` class and use the constant here.