conn :: pid
receiver :: {:fsm, pid} | {:server, pid} | pid
request :: Cafex.Protocol.Request.t
response :: Cafex.Protocol.Decoder.response
async_request(conn, request, receiver) :: :ok
request(conn, request) :: :ok | {:ok, response} | {:error, term}