Use _argset in preorder_traversal

This makes atoms much faster on LatticeOps (like And and Or), because it
avoids ever computing the sorted .args, which are internally stored as a
frozenset.  This is implemented as the default, because the docstring says
that if keys=False then no order is guaranteed, but if this becomes an issue,
we should perhaps make keys=True the default and set it to False in atoms (the
order never matters in atoms because it returns a set).
Merge pull request #2542 from asmeurer/traversal_argset

Use _argset in preorder_traversal