Use a configurable logger object for all logging.

Introduces a new configuration option `logger_factory`.  This option
can be set to a function receiving one argument, `category`, and
returning an object with (at least) functions `debug`, `log`, `warn`,
and `error`.

If the `logger_factory` option isn't specified, the default is to log
using the `console` object, with each log message prefixed by the log
category in square brackets.  This means that logging will work as
before this change, except that the prefix is formatted differently.

This change makes logging calls more DRY (by obviating the need to
manually prefix log messages with `LOG_PREFIX`) and enables use of
third-party logging frameworks, such as log4javascript.
Fix #123. New LoggerFactory JsSIP Class

A LoggerFactory defines a series of runtime configurable parameters:

- "level" ('error':0, 'warn':1, 'log':2, 'debug':3) -> Log level
- "builtinEnabled" (boolean) -> Enable/Disable default JsSIP log printing
- "connector" function(level, category, label, content) -> user defined logger connector.
  If defined, this function is called back for every log with the given arguments.

A LoggerFactory creates as many loggers as needed, all of them share its Factory's parameters.

ie:

var loggerFactory = new JsSIP.LoggerFactory();

logger_A = loggerFactory.getLogger('category_A');
logger_B = loggerFactory.getLogger('category_B');

For 'debug' level, if the requested logger has a custom 'label', then a unique logger instance is created for such label.
Every log generated by such logger will expose the corresonding 'label'.
Otherwhise, loggers are stored in the factory and they are shared by elements with the same logger category.

ie:

var loggerFactory = new JsSIP.LoggerFactory();

logger = loggerFactory.getLogger('MyClassName', 'MyClassInstanceId');