I thought I'd answer my own question as I have solved this problem for myself.
Nowhere in any of the docs or stack overflow questions I read did I see any mention that handling multiple incoming calls is possible within the browser with the JavaScript SDK. However, I have been able to do so. It seems that each Twilio.Device() can have multiple Connections. So by creating a new phone container as outlined bellow, you can manage each separately.
HTML
<div id="main_container">
<div class="phone_container" call_sid="">
<div class="well well-sm call-status">
Connecting to Twilio...
</div>
<div class="phone_btn_container">
<button class="btn btn-md btn-success answer-button" disabled>Answer</button>
<button class="btn btn-md btn-danger hangup-button" disabled>End</button>
<button class="btn btn-md btn-default mute-button" disabled>Mute</button>
</div>
</div>
</div>
Javascript
device.on('incoming', function(connection) {
// get call sid
var call_sid = connection.parameters.CallSid
// get phone container which holds the buttons and call status etc.
var phone_container = $('.phone_container')
// if there is only one container and it's empty, use this to handle call
if (phone_container.length == 1 && phone_container.attr('call_sid') == '') {
// set call sid to container
$('.phone_container').attr('call_sid', call_sid)
}
// else clone phone container for new call
else {
// clone , set call sid and append to main container
$('.phone_container').first().clone().attr('call_sid', call_sid).appendTo($('#main_container'))
}
});
In regards to transferring calls, I have used conference rooms to manage this. Similar to Devin Rader's answer to this question: Twilio - How to move an existing call to a conference