Avoiding broken parts of Guava

See https://code.google.com/p/guava-libraries/issues/detail?id=1635

**Work in progress. PLEASE DO NOT MERGE**

This still needs a bit of formatting cleanup, and `TypeToken2` is especially clunky (can we move it to a different package?). But just want to trigger the PR builders to see how far we've got.