Restructure the cleanslate project to allow for automatic adaptation acr...

...oss platforms

Cleanslate must support system level operation across many platforms. As a result
it is desirable to be able to define various "cleaner" types, then assign them to a
platform, and have the utility expose any compatible cleaners at runtime.

This makes adding new platform specific cleaners much simpler and mitigates any need
to modify the actual cleanslate.py script in order for them to be surfaced. This
architecture also opens the possibility of a plugin system.
Can you add some comments explaining the magic happening here? It's not clear whether you should care about AVAILABLE_CLEANERS when you subclass BasePlatformCleaner or the subclass will be added to the set automagically.

This approach is a bit different than people usually use for plugins (drop a file into a directory, implement something like handle(), sometimes giving user ability to enable/disable), so it would be great to be a bit verbose here.