decompress apps with ditto

this is required for resource forks to be extracted correctly.
the zip command doesn't understand them.

fixes #57
use puppet's commands dsl, DRY up cached_path
why is this even a class method
why is this a class method either
extract source_type
extract receipt_path
extract app_path, also fix missing .app bug
tbz2 is also a thing
handle implied flavors
source_type → flavor
verify implied flavor is valid
apps are installed as staff, come on now
exclude the dot from detected flavors, ughhhh
ditto works like mv, not tar -C
source is gone
puppet doesn't allow options on commands

but we're already running as root in boxen, so whatever
Merge pull request #77 from indirect/cleaner_meaner

clean up and refactor the compressed_app provider