with_mock() function

As discussed in #159. Interface as suggested by @hadley, supports nesting, mocking more than one function, not mocking at all, and returning a value.

Early draft, with tests and a documentation stub. Comments are welcome.

Now also contains #161.
Perhaps not:

> `assignInNamespace` should not be used in final code, and will in future throw an error if called from a package. Already certain uses are disallowed.

Unless you think we can get a waiver for `testthat`...