refactor artifacts

- abstracts out common logic, much code removed
- fixes one bug/inconsistency: some artifacts failed to
  "return false" when the target exists in "preflight_checks".
- one trivial functional change: artifact type and quotation marks
  added in all user feedback (quotes needed b/c of pathnames
  containing spaces)

Note, this will cause merge conflicts with at least two pending PRs: #2276 and #2258.  However, this refactor really must get done at some point.