Attr and AttrNode Iterator Improvements.

These attribute and attribute node iterators will now skip over
certain attributes and attribute node respectively if their names
have been seen before.  Semantically this means that the last
override on that name will be the value the program sees and uses.

We are currently using sets to keep track of the names.
There is a slow step during the ::increment method of the iterator
where the iterator will copy another iterator onto itself.
This can be quite inefficient and somewhat dangerous if this is
forgotten.  So we should probably improve this later.

The simple unit tests show that this is working in the simple cases.