allow lazy instantiation of Observer

- initialise topics via private getter to prevent being undefined
- protect against invalid use of subscribe (no handler supplied)