OPT: Speed improvements by avoiding repeated calls to check_array
Merge pull request #3811 from MechCoder/fix_repeated_checking

[MRG] Fix repeated calls of check_pairwise and type casting in pairwise_distances_argmin_min
ENH: Birch, first commit
add example for birch + make it more pythonic
Made the following changes
1. Improved documentation.
2. Added sanity test.
3. Moved example to a separate folder
4. Optimised compuation of centroids.
5. Added underscore to public attributes.
ENH: Made the following changes
1. Added partial_fit and predict methods
2. Inherit from ClusterMixin from fit_predict methods
3. Removed inplace modification of X and self.copy
4. Added final global clustering and n_clusters param.