Content sources cancel

Things to look for:
- Renamed ContentWarehouse to ContentContainer.  Just wasn't working for me ;)
- Add generic utility for calling and canceling synchronous flows.
- Moved the download listener to the download() method instead of instance attribute.  The listener does not apply to refresh() so kind of weird.
- Refit cancel to use the cancel utility.
  - Removed unwanted 'cancelled' state (attribute).
  - Removed cancel() from the Container (again, weird).

```
Name                 Stmts   Miss  Cover   Missing
--------------------------------------------------
pulp.server.cancel      45      0   100%   
----------------------------------------------------------------------
Ran 6 tests in 0.154s

Name                                     Stmts   Miss  Cover   Missing
----------------------------------------------------------------------
pulp.server.content.sources                  2      0   100%   
pulp.server.content.sources.constants       24      0   100%   
pulp.server.content.sources.container      100      0   100%   
pulp.server.content.sources.descriptor      36      0   100%   
pulp.server.content.sources.model          164      0   100%   
----------------------------------------------------------------------
TOTAL                                      326      0   100%   
----------------------------------------------------------------------
Ran 23 tests in 5.912s

```