Restructure of client to use component objects

Hi,

As part of looking in to Raygun for work I've created a slightly restructured client. I'm not sure if you would actually want to merge this pull request but I thought some of the work might be of use to you.

Rather than having all the logic in the client there are two extra classes: a message builder and a message sender. The client uses these two objects so much of the logic is removed. By implementing different senders I've been able to create a new client that sends all of it's messages on destruction which is what I was looking for.

~ Steve