move sync perimeter

capacity checks should be accurate, now, since the sync perimeter is
moved beyond the read. observable and observer creation now has
read-modify-write semantics.