Extensibility improvements using multimethods and leiningen.do

Hi, 

This a more generic approach to #13, mainly introducing two multimethods: `build!` and `deploy!`

As multimethods, they can be simply extended by third-party lein plugins, teaching them how to handle arbitrary build and deployment procedures, without coupling in lein-release. For example, if a Ring uberjar/uberwar needs to be built (as in #8), a hypothetical plugin such as lein-ring-release could provide this behaviour, by depending on lein-release and lein-ring.

Also, the `build!` method should be responsible for checking for artifact existence, as the kinds of artifacts built may include non-jar attachments.

Finally, when `build!` or `deploy!` implementations invoke other lein tasks, they should use `leiningen.do` instead of `sh`, as that will more intuitively preserve the project map.

How does all this sound?