Implement field access and name mangling

I only just realized that fields need to be handled differently
depending on whether they're used as lvalues or rvalues. I'll handle
that when we can actually assign things to them
You also need to overwrite visit(Select) :
```
    override def visit(sel: Select): Node = {
      preVisit(sel)
      val oldOnLhs = onLhs
      onLhs = false
      val qualifier = sel.qualifier.accept(this)
      onLhs = oldOnLhs
      postVisit(sel, qualifier)
    }```
otherwise, statements like 
    a.b.c = 1; 
or
    bs[4].c = 1;
will fail, as the code gen of "a.b" or "bs[4]" will create a Sel(...) instead of a Load(...) (which would be correct). Maybe `onLhs` is not a good name, something like `shouldReturnAddress` might be better