Streamline-based Linear Registration

Hi all,

This is the first PR for the new crème de la crème method that I presented in ISMRM. 
http://scil.dinf.usherbrooke.ca/wp-content/papers/garyfallidis_etal_ismrm14.pdf

In accordance with @omarocegueda's work you first define a StreamlineDistanceMetric then give this to StreamlineLinearRegistration which has a method called optimize which takes the two bundles (sets of streamlines) as input and returns a StreamlineRegistrationMap which can transform the moving bundle to the static.

I have only one simple tutorial (see bundle_registration.py) for now but I am working with @jchoude to put some streamline datasets online and create a couple more detailed tutorials both for bundle-based, full brain streamline-based registration and bundle-specific atlas creation. But that will come in another PR (probably multiple PRs) most likely after the release.

In all files the coverage should be high. But in optimize.py the coverage cannot be that high because
some of the tests require different versions of scipy therefore those will not run in your machine
if you don't have those scipy versions. 

Also, when you build the modules a new config.pxi file will be created in dipy/build. We use this file to check
if your compiler supports OpenMP or not. See dipy/align/bundlemin.pyx to understand how this enables
us to enable/disable functions and imports at compilation time. 

@arokem can you prioritize looking at this PR for this release? I will start working on the LiFE PR.

Enjoy your new toy ;) 
If you check my old posts in the nipy-devel list you will see that I asked Yarik and the rest if it would be possible to do what you say. I mean have scipy 0.11 as minimum requirement. But they didn't recommend it. This is why I went through all the trouble of creating this file.

But I have to say that a class like this can be a starting point for a proper optimize module. I can see that your sparse_nnls also can live nicely in that module. I want also to add some swarm optimizers which are not available in scipy.

Finally, I think that this Optimizer class will help a lot with debugging code and watching the evolution of functions. I don't think that this is so nicely done in scipy. We can do better.

I think we should keep this as it is for now but think of ways to make it better when more problems start being tackled. This will be very interesting when we start using solvers for parametric models for microstructure.