Jeffrey sources

Added all of the source management APIs.

@sebastian-mies @weirded I removed with ```withBlah(...)``` methods from my classes because now that there is inheritance involved I don't think there's a nice way to use those, which is a bit unfortunate.

@kumoroku Refactored a bit more of the HTTP logic to be friendlier, etag stuff will come later but should also be re-usable.