'Add a plugin to the list of plugins and prepare it for being
applied to all routes of this application. A plugin may be a simple
decorator or an object that implements the :class:`Plugin` API.'

def install(self, plugin):

    if hasattr(plugin, 'setup'):
        plugin.setup(self)
    if ((not callable(plugin)) and (not hasattr(plugin, 'apply'))):
        raise TypeError('Plugins    must    be    callable    or    implement    .apply()')
    self.plugins.append(plugin)
    self.reset()
    return plugin
