Performance improvements

Used strongly typed observers to prevent boxing/unboxing and reduce the
reflection overhead.
Renamed "subscriber" to "observer" (less typing)