* Introduce disposables to track sub vms and event listeners * Remove old code * Use disposable in BaseViewModel * Update vm so that the listener is tracked through disposable * No-op on dispose call instead of throwing error * Throw error in trackListener as well * Fix audio player vm * Expose isDisposed through base vm * Dispose AudioPlayerViewModel