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
I need to think about this... I **think** the `hidden` named argument only matters if the module is not being specified as being hidden by another way, i.e. it's a fallback mechanism.

But I need to double check that again, the logic gets complex here.