refactor(room views): convert the room server-side view to client-side view

Breaking changes:
- Uncaught ReferenceError: roomId is not defined when loading the controller
- Get user media permission is always displaying. The assumption is this behaviour coming from the lib/PeerConnection.js
fix(room controller): add call method
fix(room controller): remove api calling
refactor(socket): use socket provider to get the socket connection

Breaking changes:
- unable to embed the video element

Changes:
- After user submitted the callee name, the $scope.call() will emit the 'chat:joinRoom'

https://github.com/btford/angular-socket-io
fix(notification): fix the incoming call notification

Breaking changes:
- unable to embed the video element
chore(views): remove dead views

Remove:
- room server-side view
styles(index): use dot notation
refactor(room controller and view): rename the model with a better name

Before:
- data.selected to represent the callee

After:
- data.callee
chore(signaling server): remove disconnect listener

Notes:
Note that it is not necessary to call socket.leave() during the disconnect event. This will happen automatically. Empty rooms will be automatically pruned so there is no need to manually remove them.
https://github.com/LearnBoost/socket.io/wiki/Rooms#joining-and-leaving
refactor(signaling server): rename the listener

Before:
- chat:joinRoom

After
- join_room
refactor(room): use angular.element to access DOM

Breaking changes:
- the local video stream is successfully displayed on the caller views but not on the callee views
- the message socket is still broken, only the callee able to send the message to the caller
feat(main.js): configure the socket
fix(room): add connect button to start calling

Breaking changes:
- room id is still broken
- client_added event is emitted three times
feat(signaling server): add ready and sharing states mechanism

Added:
- Ready mechanism. To tell the caller that callee is already on the room view and ready to start sharing states (room id and caller)
- Sharing states mechanism. To tell each other the room id states and caller username. This shared states will be use by both the caller and callee views

Breaking changes:
- The calling is broken now

Notes:
- We are still using the '' room here
fix(tests): replace outdated test suite
chore(room): add comment
feat(*): connecting the caller and callee

The flow:
1. Ready. Both clients, the caller and callee are telling each other when the room view is loaded.
2. Sharing. Both clients, the caller and callee are telling each other the username and room ID.
3. Connecting. After everything is ready and room ID is known, then start the peer connection.

Important notes:
- Since we are using the customized version of PeerConnection.js without having a unit test, the current implementation is buggy. When we are using this plugin and run it on the application, we will have this PeerConnection.js add video element a couple of times on the room view.
chore(room controller): remove duplicate sendMessage()
refactor(event name): rename the event with lowercase_separated_by_underscores

Before:
- event name is using the loweCamelCase naming convention

After:
- start from now, event name should use the lowercase_separated_by_underscores naming convention

Examples:
socket.emit('send_him_some_message', function () { ... });
fix(call flow): connecting manually

Changes:
- When the Room views is loaded both clients, caller and callee must use the 'Connect' button to start peer connection or in this case start calling.

Workaround:
- When we received the media streams couple of times we just only need to add one video element, so this is done by using replaceWith() method from jqLite. We will replace the element until we receive the final media streams.