Instead of returning 2 values from event callbacks, run or break, return 3:
Run, Break, Wait

The Wait value would be used to keep an InstructionStepperProbeCall active in break mode.
Run would make the stepper step out of the called routine.
Break would end the step at the called routine.

Returning Wait allows separating the event callback (OnProbeCall) from the handling
(Exec.ContinueDebugEvent or CancelStep) without changing the way events are handled.
It makes it easy to implement a simple remote protocol where the client sends requests,
and the server sends responses and asynchronous messages (events).
The ArchData type brings together all process and thread attributes that depend on the processor architecture.
For now, implement the stack walker for x86.
Wrap up the descriptions of the x86 register groups with ArchData.
Move the call to Windows SetThreadContext outside of RegisterSet::SetValue. There's no need for it to be there.

Take out the back-ups of the register in RegisterSet::SetValue. They aren't needed, because after setting a register value from the UI. VS asks for the callstack again.
Get rid of changes to Engine for testing.
Make RegisterSet more general, so that it work with any thread context of any architecture.
Move the map of debug info register ID to ArchData register ID for x86 from ExprContext to ArchDataX86.
Hide the processor features inside ArchData.
Call GetThreadContext and SetThreadContext from DebuggerProxy, so that it can eventually handle other architectures.
Pass around and check the size of the context structure.

Fix a bug in RegProperty where the result of DebuggerProxy::SetThreadContext was used as a boolean instead of HRESULT.
Move the code that gets the values of associative arrays and gets D exception information into its own class and file.
When getting exception information, make sure to read memory using the debugger proxy.
Move all calls to the callback out of Machine and into Exec, except for OnCallProbe.
This will allow most common debug commands to run from outside the debugger thread.
Expose GetThreadContext and SetThreadContext from Exec, because they should be called from one place that can protect the process's state.
WriteMemory, the stepping methods, and the thread context methods should only be run while in break mode.
Simplify Exec.Shutdown.
Make it and several other methods quit if already shut down or dispatching.
Rename MakeMachineX86 to MakeMachine, because it will allow making all supported machines.
Get rid of the original MakeMachineX86.h.
Write a general MakeMachine that's used by Exec when launching a process.
Figure out the machine type of the program about to be debugged, and give it to MakeMachine to make the right kind of Machine.
Exec no longer takes a Machine.
Move methods out of IProcess that shouldn't be public.