Design to be fixed:
 - get rid of logging package
 - get rid of the IOError exception raising on file is not in the same volume
 - consolidate TrashDirectory abstract and the AvailableTrashDir abstraction
 - get rid of TrashDirectory.info_dir and files_dir properties
 - remove all the duplication 
    - all_info_files, trashed_files and for_all_trashed_files
 - restore the stress test for persist trashinfo (not sure)
 - remove NullReporter if not used
 - get rid of TrashInfo abstraction
 - get rid of TimeUtils.parse_iso8601 if not used
 - rename remove_file in to remove_existing_file
 - remove the shutil.rmtree branch from remove_file  (line 518)
 - refactor TrashPutCmd for simplicity
 - remove duplication between trash-put command line parser and Parser used by
   trash-list and trash-empty
 - remove AvailableTrashDir.for_each_infodir_and_volume if not used

Test to be ported to nosetests:
 - trash-put:
    - trash in home trashcan
    - print version
    - trash in volume trashcan 1
    - trash in volume trashcan 2
 - it should trash to $topdir/.Trash-UID when $topdir/.Trash is not suitable
    - when $topdir/.Trash does not exists 
    - when $topdir/.Trash is a symlink
    - when $topdir/.Trash is not sticky
 - should refuse to create the $topdir/.Trash/$uid directory if the 
   $topdir/.Trash is not sticky

Command trash-empty:
 x when run with `days` arguments skip .trashinfo with invalid date

Command trash-list:
 x set up integration test for ListCmd
 x when there's not trashed file
 x when there's only one trashed file
 x when there are multiple trashed files
 x support for trashed files on volume 1 trashcan
 x support for trashed files on volume 2 trashcan
 x error when a .trashinfo is empty
 x error when a .trashinfo is not readable
 x displays unknown date when .trashinfo does not contain DeletionDate
 x displays unknown date when .trashinfo contains an invalid DeletionDate
 x error when a .trashinfo does not contain the 'Path=' entry information
 x should check that the $topdir/.Trash directory has the sticky bit
 x should print version on --version
 - should check that the $topdir/.Trash is not a symbolic link
 - exception when a .trashinfo from home trashdir contains a path that is not 
   absolute
 - it should print also the orphan files

Environment:
 - use distribute as default

Features backlog:
 - support alias rmdir=trash-put
 - don't use world writable trash
 - enable trash-put home fallback
 - trash-empty removes files until a certain amount of space has been restored
 - trash-list --raw
 - trash-list <directory-name>
 - trash-list -R <directory-name>                 # recursive
 - trash-restore <path>                           # restore the newest
 - trash-restore <path> <dest>                    # restore to a certain destination
 - trash-restore --trashed-on="Apr 15, 08" <path>
 - trash-empty --from=/.Trash
 - trash-rm '*.o'
 - trash-empty should empty even the mac trash directory

