Adding a helper method that retrieves the transport instance from the connection associated with an Event
Adding Matcher interface, to be used by plugins for matching against message strings
Adding two basic matcher implementations, CommandMatcher and RegexMatcher

The CommandMatcher takes a string command, and matches against that. It ensures that the command is whole (i.e. !votes should not match !vote). The RegexMatcher simply takes a regular expression, and matches using that.
Adding a plugins directory
Adding a basic plugin framework to be integrated with the application.

This adds the skeletons for plugin construction. An abstract plugin class provides methods for hooking into events. Currently simple text matching is available for private messages, further methods for filtering events may be added at a later occasion. A PluginManager has been added, which deals with the loading of plugins, as they are expected to be provided by name from config. A FilteringCallback class provides a means to filter message events.
Application class now loads plugins via a manager instance.

Listeners are extracted from the plugins, and then registered via the standard route. The listener and subscriber registration methods have been refactored a little to simplify this process. The ApplicationConfig class now provides an instance of the PluginManager via the "core.plugin_manager" key, and sets the "plugins" and "plugins_path" keys with sensible defaults. The example "EchoBot" has been updated to reflect the fact we allow for multiple listeners per event name.
Updating config skeleton to indicate that a plugins field is available
Updating README file with basic plugin related documentation
Updating composer dependencies