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.

Closes #163.
Can you please pull this out into a named function? It seems complicated enough that a couple of tests would be worthwhile