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
you can't even declare a resource without a name
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
use SOURCE_TYPES (I hear dry is still good)
tbz2 is also a thing