handle remote module imports with merge_import_trees

Previously we were using apply_imports() to assemble our remote modules,
which actually dumps imported files to the filesystem, and then we were
reading them back in as a tree. Now we skip the filesystem and have git
just merge the trees directly, just like we always did to merge import
trees with one another. This might be faster, but more importantly it
should make conflict error messages more consistent.
catch DirtyWorkingCopyError and make a PrintableError