Refactor Scale and DataSource to seperate out Broadcaster.

Add new functionality (deregistering listener callbacks).
Add unit tests.
Close #283.