Alter TailRec to have map and flatMap

I did not get any replies on the [mailing list](https://groups.google.com/forum/#!topic/scala-internals/2Thm0YE_7zY). A PR probably has better chances to be noticed.
Here is an implementation of `map` and `flatMap` for `TailRec`, using technique, described by @runarorama (http://apocalisp.wordpress.com/2011/10/26/tail-call-elimination-in-scala-monads/).

Review by @phaller and @axel22 please (as per [policy](http://docs.scala-lang.org/scala/pull-request-policy.html)).
Also ping @odersky, as it is his code being updated.