Errors in subscribers shouldn't break message propagation

Add try catch around subscription callback invocations. Add support for subscription callback error handlers. Provide a default error handler that will report subscription exceptions as console.warning or console.log when available.

This change doesn't *appear* to have a significant impact on performance but I haven't really tested performance differences properly :smile:

### An demo appears!
```javascript
    channel
        .subscribe( '#', function() { 
            throw new Error( 'EVERYBODY PANIC!' );
        } )
        .catch( function( err, args ) {
            // args contains the 'envelope' so that your handler has access to the channel, topic, and data
        } );
```