Enable build on RHEL and CentOS
Remove excessive shortcut key matching in ToolStrip

This fixes https://bugzilla.xamarin.com/show_bug.cgi?id=23532.
Fix potential crash in ListView.ItemControl.ItemsMouseDown

This fixes Xamarin bug 23591.  Side-effects of internal processing of
ItemsMouseDown can cause ItemsMouseUp before ItemsMouseUp has finished.
Add a third AOT location, alongside ~/.mono/aot-cache and the assembly dir

Unless running in on-demand AOT mode, the AOT runtime will look for an AOT cache alongside the assembly (e.g. /usr/lib/mono/4.5/mscorlib.dll.so).

This patch adds a second search path to the non-on-demand AOT loader, /usr/lib/mono/aot-cache/ARCHITECTURE/path/to/assembly.dll.so

This new structure makes it possible to have more than one Mono architecture on a system, sharing assemblies but not sharing AOT caches (for example, i386 and amd64 Mono on the same system, for different needs)
[sgen] Fix cementing with concurrent M&S.

Cementing can happen during a concurrent collection when processing
the cardtable.  We use a separate cementing hash during concurrent
collections but we didn't pin objects from there.
[sgen] Fix build with heavy binary protocol.
[sgen] Implement a proper state machine for workers.

What we had previously was an impromptu state machine that was
badly implemented, hard to reason about, and not easily extensible.
[sgen] Remove `workers_marking` - workers are always marking.
[sgen] Stop concurrent worker during concurrent update and nursery collections.

The two collectors stepped on each other's toes.  Specifically, updating the mod union
card table while the worker thread might mark cards in the card table will not work.

The simplest solution for now is to stop the worker thread during concurrent updates
and nursery collections.  In the future we can have the thread help with the nursery
collection.
[sgen] Move heap checks before pinning.
[sgen] Add assertions.
[sgen] Optional check that the concurrent collector doesn't update references.
[sgen] Make `check-mark-bits` also scan nursery objects.
[sgen] When out of memory, finish concurrent with scanning whole nursery.  Fixes #23401.

If we run out of memory during the nursery collection in the finishing collection pause,
there will be late-pinned objects in the nursery: pinned objects that were not pinned
from conservative roots (or cementing).  We need to scan those, too, so in that case
we just walk the nursery and scan all objects.
[MWF] DataGridViewRowCollection Clear() speed up

When issuing a Clear() to remove all rows, a ReIndex() was being called for
each row that was being removed.  This is extremely inefficient, instead
do a single ReIndex() after all rows have been removed.

Before doing a Clear() of 30k rows was taking 5.8 seconds.  With this patch
it now takes 670ms.
[MWF] DataGridView: ensure first_row_index will be valid after row removal

DataGridView keeps track of the first visible row in first_row_index.
DataGridViewRowCollection will notify DataGridView its about to delete 1 or
more rows via OnRowsPreRemovedInternal().  When this happens, we need to
ensure first_row_index will still fall within the number of rows that
will remain after the row removal.

This fixes https://bugzilla.xamarin.com/show_bug.cgi?id=24372 which I
reported.
[MWF] Add unit test for #24372
[sgen] Add missing `volatile`.
[sgen] Binary protocol entry for pin stage.
[sgen] Only count cards for STW protocol if heavy is enabled.