It is possible that Moonraker cannot bind to an address if its
already in use. Handle bind errors and warn/log when they are
encountered.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Moonraker dynamically registers its routes, so we cannot easily
use the routers provided by tornado.Application. Previously
all routes went through tornado.Application, then went to
our mutable router. This refactor avoids that by having our
mutable router contain the tornadoapp instance, only using
it to provide the application delegate.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>