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
Yea, it probably should throw in that case. Currently `{[:1}` gets parsed and should probably throw...