add ReponseHandle protocol to support more flexible http handler

With `extend-protocol` the `ResponseHandle`, the user can create a async http handler with core.async, code below: 

```
(ns test.core
  (:refer-clojure :exclude [send])
  (:use [link tcp http core]
        [compojure core response])
  
  (:require [clojure.core.async :as async
             :refer [go]])
  (:import [clojure.core.async.impl.channels ManyToManyChannel]))

(extend-protocol Renderable
  ManyToManyChannel
  (render [c _] c))

(extend-protocol ResponseHandle
  ManyToManyChannel
  (http-handle [c network-ch req]
               (go (send network-ch 
                         (ring-response (render (<! c) req))))))

(defroutes rs (GET "/user/:id" [id] (go id)))

(def svr-1 (http-server 9994 rs :threads 50))

```

Also create `http-error` function because the user can define their own http handler, so this is useful.