Add colouring for media and compressed files
Add reverse parameter
Change format of file sizes to be shorter

I'm copying ls here because we don't really need the 'B' for bytes to be
listed every time. I think it looks better the new way. Unlike ls, don't
list directory sizes, because I've never found the pseudo-sizes they get
given at all useful.

Also, fix a bug where aligning columns didn't work when the number of
format characters (like '\x1B' and '[') were different between each
line.
Cache the lengths of formatting-striped fields

The code could do with some comments, but it works.
Move getopts code into options module