Bundle alignment

With this PR I am initiating a series of PRs of many new and old algorithms for the registration of DWI data. 

This PR concentrates only on bundle registration and analysis for which I will give an oral presentation at the upcoming ISMRM. 

I think it is good idea to share this code now that it is still relatively small so that it is easier for you to review. 

GGT!

The best way to understand this code is by starting from the short tutorial called bundle_registration.py and then go to the internal functions.

Together with @omarocegueda who has implemented an upcoming PR about non linear registration for DWI we have designed a common API both for streamline and volume registration. The API is as follows:

First you define a similarity or dissimilarity metric (e.g. cross correlation, sum of squared distances etc.):

metric = Metric()

Then you create a Registration class (e.g. Streamline or Diffeomorphic Registration) which takes as input the metric and has a method called optimize.

reg = Registration(metric)
map = reg.optimize(static, moving)

Method optimize takes as input the static(reference image or bundle) and the moving (target image or bundle) and it returns a Map() object (e.g. containing the affine or diffeomorphic transformation).

The Map object has a method called transform which applies the mapping to the given input.

moved = map.transform(moving)

Enjoy :)