Change set.Set to int keyed

This identified two potential bugs in the search package.
Change set.DisjointSet to int keyed

This found one bug in Kruskal.
Copy trimmed version of set.Set into search

This handles the cheap cases without need for derefs.
Use struct{}{} instead of defined var

The justification for this change is that 'struct{}{}' is immediately
obvious; it is exactly what it says it it. Conversely, the value of
'flag' needs to be found in its declaration; this is trivial if the
reader is aware of Go types and given knowledge of the map type obvious,
but naming the value adds nothing except possibly some subjective
prettiness, and is arguably incorrect since the value in 'flag' is not
actually the value that is stored and used as a flag.
Remove set package

Required methods are retained and unexported (this allows simplifying
the language to be more idiomatic Go since we don't need to coform to
set language), other methods are dropped, or kept in testing where
needed there.

The issue of using pointers to maps is skirted by having two types of
simple sets, simpleSet and set. simpleSet does not have a pointer
receiver since it never needs to make the kinds of comparisons the set
type does - Jeff's approach of using pointer equality for fast path
tests is an elegant approach is I don't think there is another simpler
or faster approach. Since we are not exporting the set type now, there
should be limited scope for abuse.

In PostDominators and Dominators the node lists are returned now as a
map[int][]int. This removes the requirement to export the set type and
also should improve performance for reuse of these lists by clients (I
should benchmark the impact). The lists are not sorted but can be by
clients.
Make more sense with function naming

I honestly have no idea what I was thinking there.
Unify simple set types

With the addition of a set value identity test function, same, we can
now perform fast path equality tests as was previously done with pointer
equality.

One minor change that comes out of this is that clear can now no longer
be a method since there is no way to get a newly created set back to the
caller except via the returned value. Using a method has the potential
to confuse callers into thinking that s.clear() will always result in a
cleared set on return; it won't unless s was already zero-length and
made. A function call is more indicative that the return should be kept.
Unexport all of disjointSet
Re-export Set as a method-free type
Make Set hold Nodes keyed on ID
Merge pull request #24 from gonum/set-reduce

Reduce the genericity of the set package