Enhanced defwebcomponent to allow reusability and genericity. Based on ideas from https://github.com/clojure-liberator/liberator/pull/97. Fixes #25 and #27.