Better expression extraction.

Most notably, I noticed that `if fmt.#` was not working correctly. I added a test case and fixed the code.

I suppose the logic is still not 100% correct, but good enough for everyone. In the specific, I think something like
```go
(struct{A int}{3}).#
```
would not work (since the expression contains a keyword), but seriously, who does that? :frowning: 

Anyway I'll keep thinking about a better solution, let me know if you have any ideas.