Fix concurrency issue in DBEntryBase removal

Some bgp tests used to fail in rare cases because a BgpTable was not
empty after the test ended.  The core file showed that the BgpTable
had a route which was marked deleted and was not on the change list.
The BgpRoute had no BgpPaths and no DBState associated with it either.
The core also showed that all DBPartitions' remove queues were empty
and all DBTablePartBases' change lists were also empty.

The root cause was a concurrency issue in DBEntryBase removal.  If
DBEntryBase::ClearState and DBTablePartBase::RunNotify were working
on the same DBEntryBase, it could so happen that ClearState decided
not to enqueue the entry for removal becuase it saw that the entry
was still onlist, and RunNotify decided not to remove the entry as
it saw that the entry had non-empty DBState.

Fix is to modify RunNotify so that the OnList bit for an entry gets
cleared before checking if the entry is eligible for removal. The
dbstate_mutex ensures that only one of the two routines takes care
of removing the entry.

Change-Id: I10e9822f1a100a9739624f3e49c05ccf89018a34
Merge "Fix concurrency issue in DBEntryBase removal"