Request path abstraction

This PR attempts to address the following issues:

* #226 - RecursionGuard / ThrowingRecursionBehaviour works incorrectly after an exception was throw by a decorated builder. This is fixed by introducing an `IDisposable` wrapper around the push/pop logic.
* #234 - Incorrect 'recursive' request type displayed in ObjectCreationException text. This is fixed by exposing `NonAutoFixtureRequests` from the new `RequestPath` object.

Additionally, the `RequestPath` object is meant to communicate the concept of a path of requests better than it did before. The logic to build the display text (used when throwing an `ObjectCreationException`) has been refactored into `RequestPath` and reused in both `ThrowingRecursionHandler` and `TerminatingWithPathSpecimenBuilder`.