Merge scala-2.10 into master

This is an experimental commit to demonstrate what merging the scala-2.10 branch into master would look like. It is not intended to be seriously reviewed/merged yet (it doesn't even compile). In particular, we are waiting for scala-2.10 to get a few more fixes before considering it stable.

I have tried to manually merge all obvious conflicts, but there were several places where I either wasn't sure after merging or didn't feel confident attempting a merge. Please look for comments like "FIXME: Merge @<username>"

I have requested comments or changes from the following people:
@ScrapCodes - everything
@jerryshao - kafka
@rxin - repl
@JoshRosen - changes in Java Function API
@mridulm - contradictory comment

Since this is only experimental, don't worry about actually doing anything just yet; it is fairly likely I will have to redo the entire patch when we finalize the scala-2.10 branch. However, I'm sure the same conflicts will arise then too.

Also TODO:
- Change all new instances of ClassManifest to ClassTag.