Respect terminal width during status output.

This introduces a pretty complex architecture of tainted strings.

We could have gotten this with less work, but this makes the user-facing
code more readable, and I hope that the UserString and BlessedString
classes will be re-usable.
Do not download full files when not necessary.

I think when I wrote this I simply switched the values for
the stream argument.
Fix a test.
Fix the size filter.

Add tests for it.
Move CLI code into a submodule, it is groing too large.