Implement two-token lookahead

* Use `js2-token' defstruct to store token info.
* Cache tokens in a vector buffer `js2-ti-tokens'.
* Obviously, a deoptimization, gives us performance hit:
  - ~60% slower in interpreted mode (Emacs 24.3.50.1).
  - ~50% slower in compiled mode.
* `mod' is actually slightly faster than `logand' for our usage.
* Optimizations tried:
  - Cache the current token.
  - Cache the current token type.
  - Reuse the token structs, instead of creating new one each time.
  - Set the js2-token struct's type to `vector' or `list', disabling
    the usage of the tag symbol, and thus getting rid of type checking.
    Gives us ~15% improvement in interpreted mode, but no significant
    change in compiled mode.
js2-record-face: Accept optional, second parameter

No significant improvement in performance.
* js2-get-string-from-buffer: Rename, make it take token argument

* js2-collect-string: Simplify

* Having the global `js2-ts-string-buffer' var is still necessary,
  until `js2-add-to-string' is replaced with simple `push'.
Implement "save & restore" for token stream
Extract js2-parse-function-stmt and js2-parse-function-expr

* Fix printing of js2-function-nodes with member-expr.
* Prohibit unnamed function expressions where statement is expected.
* Omit the case of "random-member-expr", whatever that is.
  Anyone who misses it is welcome to file an issue.
Support arrow functions (#108)

Roughly along the lines of
https://hg.mozilla.org/mozilla-central/rev/bf3ce88c6ea3
Fix (and rename) the ts-set-state test
js2-parse-switch: Fix the docstring
Check in .dir-locals.el
Merge branch 'arrow-functions'

Conflicts:
	js2-mode.el
pn was indeed unused