Refactor attempt #3

This is still a fairly large commit, I can't really get it much smaller than this, but I have tried to address your concerns as much as possible.

The major changes are generally removal of code that is no longer needed.

I have taken care to ensure that the function chains are called as they were previously to maintain backward compatibility. Additionally for the methods that I would have removed I have marked deprecated so that they can be removed at a later date.

The code has been tested using the sample application in a variety of scenarios and I have synced with your HEAD before this to ensure that I have tracked the latest changes.

Please let me know what you think.