Allow callbacks to be more dynamic

This allows for significantly more dynamic callbacks. It gives callbacks access to all of the same data as normal responses. It also allows callbacks to update the headers of the response.