PY3 use urllib2 or urllib.request, based on Py2/3

Also fixes #2166.
DOC let OneHotEncoder, DictVectorizer and FeatureHasher refer to each other

Judging by ML and SO questions, users have a hard time finding the right
vectorizers and don't know how to trade off the benefits of these three
classes.
DOC correct class_weight description for LogisticRegression
BUG: use correct algorithm for callable metric
TST: set random state in callable_metric test
Style
More readable condition and more precise error message
FIX memory usage in DictVectorizer.fit

No need to materialize X in memory if it's a generator.
Fixes #2171.

fit_transform still needs fixing; it should be single pass.
DOC/FIX twenty_newsgroups.rst should use TfidfVectorizer

Instead of Vectorizer. Fixes #2173.
Traversal in and tested. Next step is to remove references to old code
Removed reference from spectral_clustering to old csgraph
csgraph updated from hierarchical.py
Removed actual _csgraph file, tests still all pass
Turns out sparsetools wasn't needed either
Missed a spot
Reference to graph components updated in dev docs
Two more spots. I think that's it
Now that the folder has more than just mst in it, rename to sparsetools, which should help with referencing it.
BUG: fix sparsetools tests in old scipy
WIP: new Cython interface for decision trees