Generic build and deploy tasks that respect profiles

This adds two related features and refactors some code along the way:

* `sh!` forgets active profiles during the child `lein` invocation for build/deploy. By using `leiningen.do` to invoke tasks with the computed project map, any activated profile configuration is kept.
* Building artifacts is not generic, so it does not support non-jar types, as reported by @thomaschrstnsn in #8. Based on that PR, this adds a `:build-via` parameter to select a strategy such as `:lein-jar-pom` or `lein-ring-uberwar`.
  * Strategy selection for both build and deploy is done using multimethods instead of a `cond` form.

Any thoughts on these changes?