Label3d

This pull request features two things:

1. 2D labelling refactoring. This has resulted in:
   * Higher readability of the code by breaking large functions into smaller ones.
   * More exhaustive documentation of the code.
   * Better performance.

2. Addition of support for 3D arrays.

I have read the papers that were referenced in the code. I think have understood them to let's say 90%, but I have found the implementation of the 2D labelling slightly different than the algorithm described in the paper by Kensheng et al. (there is no decision tree and also only one iteration is performed).
I have therefore implemented the 3D in an analogous manner. Since it has passed my (simple) test cases, I think that it is time to come up with it and get some feedback from you guys.
> Could you be more specific?

Why yes, yes I could. =)
http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.morphology.generate_binary_structure.html

You understood it correctly the first time though. That's the nice thing about well designed parameters.

As I said, though, implementing this would be an API change *and* it would require renaming the parameter. Are you familiar with our deprecation procedures?

In summary:

- neighbors={4,8} should work for two more releases, *but* it should raise a deprecation warning.
- a new "connectivity" parameter that behaves as above should be added to the very end of the list (to avoid breaking positional arguments in existing code).
- removal of neighbors/deprecation and moving of connectivity should be added to TODO.txt for v0.13

@stefanv would you be ok with this change?

One alternative that I've seen elsewhere is to accept both, and both accept either form of the connectivity. These are easy to disambiguate because the possible numbers have no overlap.