Make AsonIter iterable

This is consistent with the rest of python's iterators. Iterating an iterator
simply returns another reference to the iterator.

Signed-off-by: Casey Dahlin <casey.dahlin@gmail.com>
Add iter_union method to ason

Previously, if you were to iterate "[6] | [7]", you would get "[6]" and then
"[7]", but if you started with "[6]" you would get simply "6". Unions aren't
really containers, in that they vanish when there's only one element.

This change fixes it by treating unions as a solid object. If we iterate "[6] |
[7]" we get "[6] | [7]" as our only iterator output. We can call iter_union()
to give us an iterator that will return what we had previously, but more
importantly, that iterator will return "[6]" when asked to iterate "[6]", so
both normal and union iterators behave consistently.

Signed-off-by: Casey Dahlin <casey.dahlin@gmail.com>