Use a proper lexer in cursorcontext.go

Instead of loosely parsing strings, we are now parsing AST tokens
direclty. This should make the context detection much more robust, and
allow for easier extensions later on.
Rename bytes_iterator into token_iterator
Rewrite a couple switch blocks
Rename identifiers for style consistency

Currently all identifiers are in lower_underscore_separated format,
while the entire Go standard library and most of the other existing
  projects use the lowerCamelCase format instead.

I used the following script for applying the change:
```sh
fix() {
  readonly SOURCE=${1}
  readonly TARGET=${SOURCE}_

  gsed 's/_\([a-z]\)/\u\1/g' ${SOURCE} > ${TARGET}
  mv ${TARGET} ${SOURCE}
}
export -f fix

find . -iname '*.go' -exec sh -c 'fix "{}"' \;
```

And then manually ignored a change in the `_gccgo/package.go` file
(`".go_export"`).

Feel free to apply the change yourself instead of merging the PR if
you'd rather avoid my name appearing everywhere in `git blame` (I don't
mind either way).