Add isolate selection support to memory screen + other minor UI fixes (#4173)
While the live feed appears to display the sum of all memory consumption
of each isolate, the heap snapshot mechanism only collects a snapshot
for the currently selected isolate. Since there was no isolate picker
enabled for the memory screen and no indication that snapshots are
isolate dependent, there was no way to differentiate between snapshots
and where they came from.
This change enables the isolate picker for the memory screen and displays
the name of the active isolate corresponding to each snapshot to make it
clearer that the snapshots correspond to individual isolates.
In addition, this change makes some minor UI tweaks, particularly with
respect to how borders are drawn around the various components (e.g.,
there was no borders around widgets in a `Split`, making the actual
footprint of the dragable bar unclear.
Finally, there's a fix for an issue where switching between the
'Analysis' and 'Allocations' tabs with classes selected for tracking
would result in a null assertion being hit when trying to generate the
'Tracking' table. It seems that the `AllocationTableView` isn't kept
alive when switching tabs, causing a rebuild where we assumed some state
was already initialized.