Haoyang: FooTag.BAR becomes Foo.Tag.BAR

Also, local variables that may conflict with user-defined fields are prefixed by an underscore. The user simply should not use field names that start with an underscore. They can use `_i <java name="i">` in their atd definition.