Track names on a per-expression basis

All tests pass! It's super-ugly, though, and I'm sure I'm missing stuff.