Use JSON models to encode/decode messages to/from Janus
- Encapsulated Janus session and plugin handle functionality into classes
- Simplified generating Janus requests and processing Janus replies
- Correctly handle Janus errors sent as error events in success replies
- Split Janus event handlers to improve readability and maintability
- Moved data validation to the JSON model validators