Improved tree traversal

This fixes four issues

- The code used super.traverse to recurse the trees. This was wrong
  as it would skip one 'layer' of nodes.
- Traverse the argument list of DefDef's
- Traverse annotations on DefDef's
- Store occurrences in ValDefs

So it turned out that the failure that was seen with the string
interpolation test had nothing to do with string interpolation.

Originally it only found one occurrence of `x` in the following
example.

  def foo(x: String) = s"Hi there, ${x}"

I assumed that the `x` that was missing was the one inside of the
string interpolation, but actually it was the argument. Ups.

Fix #1001621