This patch adds support of watchpoints to the old ProcessWindows plugin.
The ProcessWindows plugin uses the RegisterContext to set and reset watchpoints. The RegisterContext has some interface to access watchpoints, but it is very limited (e.g. it is impossible to retrieve the last triggered watchpoint with it), that's why I have implemented a slightly different interface in the RegisterContextWindows. Moreover, I have made the ProcessWindows plugin responsible for search of a vacant watchpoint slot, because watchpoints exist per-process (not per-thread), then we can place the same watchpoint in the same slot in different threads. With this scheme threads don't need to have their own watchpoint lists, and it simplifies identifying of the last triggered watchpoint.
It looks like it is enough to just implement corresponding methods in the NativeRegisterContextWindows-based classes to support the feature in the new NativeProcessWindows plugin. I'll do it in the next review.
The names here are a bit confusing: GetTriggeredHardwareBreakpointSlot doesn't return a slot; it returns the index of a slot, so slot also isn't a slot, but the index of a slot. m_watchpoint_slots is not a collection of slots but IDs, that's indexed by an index called a slot.
It may not be possible to completely rationalize this, but doing even a little could help future readers understand. For example, slot could be slot_index, and m_watchpoint_slots could be m_watchpoint_ids (or even just m_watchpoints).