use ordered to handle Set args: define infimum_key

The sort_key is insufficient to differentiate between the arguments. I demonstrate by using an Interval and FiniteSet

```
>>> I = Interval(0, 5); S = FiniteSet(1, 2, 3)
>>> from sympy.core.compatibility import default_sort_key as k
>>> k(I)
((1, 0, 'Number'), (0, ()), (), 0)
>>> k(S)
((1, 0, 'Number'), (0, ()), (), 1)
```

This is because the infimum was being used sucessfully to (unsuccessfully) represent the objects being sorted. The better approach is to use ordered and let the infimum be the default sort key -- and thus fast if the infimums are sufficient to break ties -- else fall back to the default_sort_key for the object.

In addition, the sorting of args was done before the evaluation. I moved this to after the evaluation since those are the actual args that will be stored (and a quick glance at an evaluation routine didn't make it look like it assumed the arg were already sorted).
clean up docstrings in sets