using compat._ to plug source compatibility breakages

This commit makes the code source compatible across Scala 2.10.3
and https://github.com/scala/scala/pull/3452, which is proposed
for inclusion in Scala 2.11.0-RC1.

We only strictly need the incremental compiler to build on Scala
2.11, as that is integrated into the IDE. But we gain valuable
insight into compiler regressions by building *all* of SBT with
2.11.

We only got there recently (the 0.13 branch of SBT now fully cross
compiles with 2.10.3 and 2.11.0-SNAPSHOT), and this aims to keep
things that way.

Once 2.10 support is dropped, SBT macros will be able to exploit
the new reflection APIs in 2.11 to avoid the need for casting
to compiler internals, which aren't governed by binary compatibility.
This has been prototyped by @xeno-by: https://github.com/sbt/sbt/pull/1121

Review by @jsuereth

This merge doesn't have to be coordinated with the merge to Scala:
  - the zinc/IDE build chain is unaffected.
  - we can use the branch in our community build that builds *all* of SBT

But in any case, it will be nice to restore our community build to the mainline sooner rather than later.

This branch was built in against https://github.com/scala/scala/pull/3452 here: https://jenkins-dbuild.typesafe.com:8499/job/Community-2.11.x-retronym-pr-3452/8/console