Fixed the event model, got updates working!

- Added some packages to make unit testing easier. Loaded by the karma config
- added some formatting for the details table on the listen page
- implemented isDirty and isNew. Dirty properties are tracked with JavaScript getters/setters
- added a ton of unit tests for the Annotation class - the only way I could sort out the nightmare of JS props
- Converted some exceptions to assertions in bawAnnotationViewer.js. Also
	- Also changed unit/converter calculation to work solely off metadata. This means it can be calculated before an image resource is loaded. Images are now stretched to fit. Warnings are still included for badly sized images.
	- FIxed by in invertPixels function
	- fleshed out the modelUpdatesServer stub - now with real live updating! w00t!
	- converted lastUpdate to $lastUpdate - this means the prop is ignored for equality checks. If included the model goes through an extra update loop... very inefficient
Merge branch 'master' of https://github.com/QutBioacoustics/baw-client