[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
[MWF] Fix off-by-one from 5a5c683

first_row_index needs to be <= RowsLeft - 1, since we are comparing a
row count vs an index.
Merge pull request #1398 from jwestfall69/dgv-first_row_index

[MWF] DataGridView: ensure first_row_index will be valid after row removal