Downloader.handle() now returns {'tarball': path} and tests

 * A good amount of tests was added
 * The UnknownProtocol exception was renamed to UnknownURL
 * Better message for the UnknownURL exception in download()
Update curdler to use new maestro field names

Just an update for the curdler component. They now use the `directory`,
`tarball` and `wheel` field names instead of just `path`. The functional
tests were updated accordingly.
Fix duplicated requirements in maestro due to wrong defaultdict usage
Fix Maestro.filter_by() to acknowledge PENDING status
Poorly written tests for maestro.format_requirement
Improve Maestro.best_version() and add Maestro.filed_packages()
Dependencer should not change the status of a BUILT package