[MRG] DBSCAN: faster, weighted samples, and sparse input

DBSCAN now supports sparse matrix input, and weighted samples (a compact representation of density when duplicate points exist; also useful when weighting is possible for BIRCH's global clustering).

I have also vectorized the implementation. This reduces the cluster comparison toy examples under DBSCAN from ~.6s each to .02s each on my machine.

(This could be sped up further by allowing a dual-tree radius_neighbors lookup that reuses the computed tree. The toy examples have `n_features=2`, so neighbor calculation does not take up as much of the overall time as it might otherwise.)
Please use seed-effect free rng seeding:

```python
rng = np.random.RandomState(42)
sample_weight = rng.randint(0, 5, X.shape[0])
```