Work in progress -- handoff to Dan.

This work improves our link error handling logic.  I have started moving
things back into dll.py where it makes sense -- i.e. expanding the role of
the LinkError-derived exceptions, such that *they* are the things that print
the useful error messages, not link.py.

Use BrokenLinkage as an almost-finished example of how I see those classes
changing.  Note the distinction between the prefix message, the description of
each individual library affected, and the trailing suffix/summary that gives
the user a bit more information about how to resolve the issues.

The idea is that you'd just get one summary message for each type of breakage
per conda-build attempt, i.e.

    Broken dynamic library linkage detected:
        libfoo.so: wants to link to libR.so but can't find it.
        libbar.so: wants to link to libz.so but can't find it.
    Broken linkage errors are usually caused by ...

    External linkage detected:
        libfoo.so: links to the following packages outside of $PREFIX:
            /usr/lib/xxx1.so
            /usr/lib/xxx2.so
        libbar.so: links to ...

    See http://conda.pydata.org/docs/link-errors.html for more info.

    Tip: run `conda build --ignore-link-errors` to ignore these errors and
    build the package anyway.  Note that the resulting package will not work
    if you install it on a different system *unless* that system also has all
    of the libraries listed above installed.

To make sense of this commit... I was aiming for the end goal above...
initially started working on link.py, it then became obvious it was better to
encapsulate this functionality in each LinkError-derived class in dll.py, so I
switched to taking a first pass with BrokenLinkage.

Not sure if we'll need link.py... I do like the ability to tweak the handler
though (which I added back in)... let's review that bit later.

Also the only thing you should be able to ignore is ExternalLinkageError, i.e.
via --ignore-external-linkage-errors.  It doesn't make sense to permit someone
to ignore a BrokenLinkage or RecipeCorrectButLinkageBroken (or whatever it's
called) as those point to either a) fundamental problems or b) correctable
problems, respectively.

We're also going to need to add some docs for the non-existent links I'm
referring to:

    http://conda.pydata.org/docs/link-errors.html#broken
    http://conda.pydata.org/docs/link-errors.html#external
    http://conda.pydata.org/docs/link-errors.html#recipe-correct-but-...
break callname import into separate function
construct summary_message like BrokenLinkage does
add FIXME
remove unused function get_base_dir, reduce_path
use list() to create copy like one line above
utilize catgegorize_dependencies
add docstring for SlotObject
add minimal docstring for LibraryDependencies
add function ensure_dir, use instead of if statement
make prefix_files dispatch to dll.get_files
add docstring to get_files
BUGFIX: add missing import
BUGFIX: fix error message string creation

SyntaxError otherwise
BUGFIX: pass missing argument, "deps"
BUGFIX: fix argument passed to join
make parsing module name into a function
BUGFIX: remove hardcode of link error handler

else it overrides dynamically set config.link_error_handler
add FIXME: conflict between comment and code
add class docstring to LinkErrors