[2.0] Add copy method to Request and PreparedRequest objects

I really think it is only needed for `PreparedRequest` objects, but I could see a desire to implement it on `Request` objects too.

The reasoning is simple. Currently, we have duplicated code to make copies of `PreparedRequests` to preserve the history of the requests sent and be able to make new ones. We could not only reduce duplication, but also ensure (via tests) that the library won't break in weird ways because of this in the future. It would be a dead-simple method to write, and would be very useful and probably even more useful to authentication handler authors.