Add a generic street notes source interface.

As suggested by @hannesj in #1529.

- Add a generic street notes source interface.
- Put all note-related stuff to dedicated package.
- Extract few inner class as top-level classes.
- Add few comments.