Api refactor

fixes #21
fixes #31

* Does not have a general `With(params string[] args)` method because I'm too lazy to write tests.
* Does not have a fancy pants `.Properties(new { Configuration = "Release"})` method because I don't know an easy way to do it.
* Used `List<T>` instead of `HashSet<T>` because I worry that order may be important. Willing to change them to HashSet if you think it is better.