Decomposition of Deployer in order to add tests / other hooks

Hey hey,

Just had a quick hack around here, like what you've done. Had a bit of a rename/shuffle/copy pasta around so I can start putting unit tests around each of these discrete pieces to help the dev cycle.

Currently split out the discovery of installers, the configuration of installers and the execution of configured installers.
Split assembly discovery away from assembly loading (two very different things with different chunks of code - should enable TDDing the crap out of it)

Renamed "IFactory" to "IInstallationConfiguration" because it makes more sense in the installer class. 

Organised classes into a couple of namespaces - "Features/Discovery" and "Features/Installation"

Added some exit codes (-1 for "didn't install anything") and an Enum that maps to them.

Using the null object pattern / empty lists to reduce the amount of null checks etc.

Feel free to say "NO NO NO, not what I had in mind", figured I'd PR rather than just pushing to the repo and moving all the cheese.  The diff is a bit confusing to read on GH, just pull the branch and it'll make a lot more sense.