Add an old python TTY UI class I wrote

The original idea here was that I would create a consistent API that
could be used to abstract whether the app was running in in a TTY or had
curses to do things like displaying coloured text, asking a y/n
question, etc.

I never got around to writing the curses implementation and never
stabilised the API, so this just ended up being a quick n' dirty way to
add some fancy output to some scripts.

I'm about to use it again, so I'll add it here.

If I ever get around to working on this again expect the API to change.

Signed-off-by: Ian Munsie <darkstarsword@gmail.com>
Add script to find some problems with Steam acf games

- Lists games that have no "MountedDepots" (No files)
- List missing files (highlighted with a red background)
- List files with mismatches in their path capitalisation (mismatches
  are highlighted with a yellow background)

You may pass extra levels of verbosity (currently up to 3) to get more
information.

Note: If the script reports that the manifest files are not found it
can only do a few checks (in particular it cannot check the files within
the game) - you will need to "verify integrity of game cache" manually
from within steam to download the manifest files and try again.

Does not:
- List bad CDR entries ("invalid app config" / "missing executable")
- Pay attention to the state of a game (ie, games currently being
  downloaded or updated will be listed as bad)

Will do in the future:
- Rename files with mismatched case to correspond with the filenames
  in the file manifests.
- List files found in the game directories that are not listed in the
  file manifest, and optionally delete them.

Pipe dreams:
- Compare multiple manifest files to e.g. find what changed in an
  update, look for differences between Windows & Linux versions, detect
  identical / similar files that have different filenames.
- Actually use the verification data in the manifest files to locate
  corrupt files. I'd need to work out what algorithm they use first, so
  this is unlikely.

Signed-off-by: Ian Munsie <darkstarsword@gmail.com>
Merge branch 'vi-mode-wip' into temp-merge