getting the observation chain working

- Wrap observers using weak references to prevent retain cycles.
- Move category definitions and implementation into PTLDatasource.h/m