[MRG] 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!

 
I remember doing it i.e increasing from 0 to 2, because of the following reasons (I'll need to search for the specific commits).

1. From 0 to 1, for the reason to avoid recalculating the centroids and squared_norms for every call to `euclidean_distances`, et all.
2. From 1 to 2 to avoid the temporary storage of `O(n_branching_factor X n_features)` for the calls in `_CFNode` to pairwise_distances. If not then I would have to create temporary allocations by doing the equivalent of `np.asarray([i.centroids_  for i in node.subclusters_])`, which was found to be slowing up drastically. If you search the long PR discussion (somewhere in the outdated diffs), you would be able to find references to it.

True, is it not mentioned in the paper about the storage of these, but I believe in this case, it is okay to modify it a bit (since the benefits outweigh the drawbacks)