[Mono.Debugger.Soft] Caching threads and bulk fetching StackFrames

* Connection.cs:
 * Fixed wrong version check
 * Changed Thread_GetFrameInfo signature to be asynchronous
*  ObjectMirror.cs
 * Invalidating StackFrame for thread when methods are invoked because stack will probably change...
* ThreadMirror.cs
 * A bit complicated thread safe mechanism to be able to handle InvalidateFrames in middle of fetching and not hang in any case...
* VirtualMachine.cs
 * Reason why method InvalidateThreadsAndFramesCache is called inside Resume is because XS had caching of Threads for few years now and it was invalidating ThreadList every time Resume was called so it makes sense to invalidate here...
 * InvalidateThreadsCache is separated from InvalidateThreadsAndFramesCache  because in case of new threads or stopped threads there is no need to invalidate all frames...
 * if (Version.AtLeast (2, 34)) check before making batched fetch is to prevent any possible regression on older runtimes and do fetch 1 by 1 the old way...