[MRG+1] Clustering algorithm - BIRCH 

Fixes https://github.com/scikit-learn/scikit-learn/issues/2690

The design is similar to the Java code written here https://code.google.com/p/jbirch/
I am pretty much sure it works (If the JAVA implementation is correct, ofc), since I get the same clusters for both cases. I opened this as a Proof of Concept.

This example has been modified, http://scikit-learn.org/stable/auto_examples/cluster/plot_mini_batch_kmeans.html
 
When `threshold` is set to 3.0

![figure_1](https://cloud.githubusercontent.com/assets/1867024/4772737/1dd8604a-5b9b-11e4-800d-aea031410a30.png)

When `threshold` is set to 1.0

![figure_2](https://cloud.githubusercontent.com/assets/1867024/4772748/2e46daec-5b9b-11e4-8f49-672b0ada17b7.png)

TODO: A LOT

- [x] Make it as fast as possible.
- [x] Support for sparse matrices.
- [x] Extensive testing.
- [x] Make the common tests pass, for now I have added it to `dont_test` ;)
- [x] Narrative documentation

Awating some initial feedback!

 
> Well in the paper it says, that Phase 4 uses the centroids of the clusters produced by Phase 3 as seeds and redistributes the data points to its closest seed to obtain a set of new clusters.

I don't think this is the same as what you're doing. "redistributes the data to its closest seed" could mean that prediction is basically:
```python
cluster_labels = global_clusterer.fit_predict(self.cluster_centers_, sample_weight=weights)
self.predictor_ = KNeighborsClassifer(1).fit(self.cluster_centers_, cluster_labels)
self.labels_ = self.predictor_.predict(X)
```

Note it says "to obtain a set of new clusters." not "to obtain a set of new centroids."

However, I agree that the "rare misplacement" idea on page 5 might mean that they intend the centroids to be merged and adjusted as you have done, but it's in contradiction with the idea of the closest seed.