[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.)
```python
core_repeated, label_repeated = dbscan(X_repeated, random_state=42)
```