DRY up uploader row classes

Lots of duplication across these and their tests. I've extracted the
most common features to the base clase to DRY things up.