refactor($parse): separate tokenizing vs parsing more

Fixes `a.b` and `a .b` generating different getterFns (which was mentioned a while back in https://github.com/angular/angular.js/pull/8901#commitcomment-7691290)
Fixes `{'': ...}` being converted to `{"''": ...}`
Fixes #9131 (similar to how #9229 fixes it)

Also simplifies (imo) a few areas in parse.js. For example...
* tokens no longer have any `fn` (which had 2 meanings before)
* token `text` is always the token text (previously it was the raw value for strings/numbers)
* `.consume()` is used in a few more places instead of `.expect()` and will output a "Unexpected end of expression" instead of `.expect()` returning false and failing later
* the tokenizer no longer tries to figure out if a ".identifier" is a method invocation or not, that's now in the parser and much shorter
I think that
```js
while (this.peek('.') && this.peekAhead(1).identifier && !this.peekAhead(2, '(')) {
  id += this.consume().text + this.consume().text;
}
```
would make it better. The reason being that even when it is slightly less performant on `parse`, it is being very explicit and after a `.` there should always be an identifier