thread-safe implementation of observablecollection

use MayaEvent for all triggered events in observable so the collection
changes are thread safe when the gui updates
moved deletions into safe block
fixed bug where LateBoundProperties shared list defaults
better null test