Refactor AttrList to meet its intended specification.

Despite being a set (wrt equals and hashCode), an AttrList must keep
the initial order of attribute names, and provide a predictible
iteration regarding it. This is needed for convenience and principle
of least surprise on the public API. This commit fixes the implementation
to meet that specification. We turn from a SortedSet to a LinkedHashSet
that keeps the insertion order.
Add unit tests for Tuple (refs #4)
Fix documentation typo.