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.

In almost all cases we prefer not to do big `else` blocks after a `return`. This block would become:
```java
if (Character.isDigit(peekChar())) {
  return readInt();
}
String word = readWord();
if (word.equals("true")) {
  return true;
} else if (word.equals("false")) {
  return false;
} else {
  return EnumType.Value.anonymous(word);
}
```