This comprises the following tasks: - [x] Implement pluggable URI resolver. - [x] Implement pluggable cache. - [x] Make sure all calls for external resources go through the user agent. Specifically: URI resolver -> cache -> http stream. - [x] Allow vetoing of an external resource call, probably with the URI resolver. - [ ] Allow overriding of the whole user agent.