Async unit test improvements
Support testing interleaved async calls, and allow expected method calls on mock objects to specify async call behaviour. Clean up test case API slightly, and add better logging control for engine and client tests.
Support testing interleaved async calls, and allow expected method calls on mock objects to specify async call behaviour. Clean up test case API slightly, and add better logging control for engine and client tests.