[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!

 
Applying this approach (without `sample_weight`), I have run `plot_cluster_comparison` with the following additions:
```python
    from sklearn.base import clone
    birch_kwargs = {'threshold': .1}
    birch_kmeans = cluster.Birch(n_clusters=cluster.KMeans(n_clusters=2), **birch_kwargs)
    birch_dbscan = cluster.Birch(n_clusters=cluster.DBSCAN(eps=.2), **birch_kwargs)
    birch_spec = cluster.Birch(n_clusters=clone(spectral), **birch_kwargs)
    birch_agg = cluster.Birch(n_clusters=clone(average_linkage), **birch_kwargs)
```
Given #3851 I've thrown automatically 5NN connectivity calculation into agglomerative clustering so that I can show the correct effect.

This is what it looks like:


![with assignment to nearest global cluster](https://cloud.githubusercontent.com/assets/78827/5041255/53c62530-6c11-11e4-853f-02ae183b003d.png)


Note we get similar results for the BIRCH-prefixed models in most cases but DBSCAN (where I've not adjusted the parameter that is apparently sensitive to number of samples). It also shows an improvement in timing in most, but especially SpectralClustering which is an order of magnitude or more smaller on the trickier datasets.

Your current global clustering approach produces the following:

![with centroid adjustment](https://cloud.githubusercontent.com/assets/78827/5041303/a94f465c-6c12-11e4-9a5d-522179f0a451.png)