Fix the explicit frames unwinding on Unix
This change fixes a problem when exception unwinds native frames of code that contains
explicit frames. There were two issues. First, the destructor of the explicit frame
base class Frame that was responsible for popping the frames was missing switch to
GC cooperative mode and so it could pop frames that GC was currently walking.
And second, after adding the switch to cooperative mode, it turned out that if a
thread gets blocked in the Frame destructor due to GC and the stack walker tries to
get stack cookie from FrameWithCookie wrapper of a class derived from the Frame,
it fails since the vtable pointer was already reset to the vtable of the base Frame
class and it detects that as an invalid case.
The fix was to add destructors to all final classes derived from Frame and perform
the frame popping from there.
Commit migrated from https://github.com/dotnet/coreclr/commit/
0e14371a2638dd27222fd63af6032b5cd1a64add