add support for installing hidden modules and using them as dependencies (WIP)

Not 100% finished yet, but getting there. I'm not confident enough yet that I'm covering everything I need to... Some code cleanup might be needed too.

Currently tackled:

 * installing a hidden module, and skipping the build for existing hidden modules
 * specifying hidden modules as dependencies via `hiddendependencies`, and resolving those dependencies correctly
 * correctly reporting hidden modules in `--dry-run` (needs an enhanced unit test)

@wpoely86: please review, since we discussed this earlier
Looks better!