Rework fetch

* move more of the fetch command into utils so it can be used by scripts
* change fetch to know about existing files using the source_url as the
  "key"
* add --force flag which will force fetch to stomp on existing files

This assumes the source_url is a unique key in a group of videos and
that it doesn't change. If either proves not to be true (which I suspect
happens more often with some video hosts than others), then this won't
work. We'll have to accumulate these cases and maybe provide an
additional argument that specifies which key to use.

Fixes #16