Add external content fetcher

(still needs unit tests, fixing up unit tests, and to wire the beans everywhere...)