another attempt to close #249, using withCallingHandlers() instead of modifying tryCatch()

also closes #217 if everyone agrees with this approach
well, we still have to use do.call(`$`) on .self; closes #274

Winston reported the issue at https://stat.ethz.ch/pipermail/r-devel/2013-October/067744.html

partially reverted 86d61e0b443987d4898154ddd966c698058210d7
Merge pull request #273 from yihui/feature/callinghandlers

use withCallingHandlers() so that users can do error handling like recover()