api: new "pure" interface for plugins

Decouples the plugins from the core by not providing any implementation in the
interface. The plugins are expected to either implement the interface
themselves or use a help class for some of the work.
api: add new help classes for plugins

Implements part of the interface to make it easier to implement plugins.
icq: port to new api
jabber: port to new api
msn: port to new api
aosd: port to new api
auto-reply: port to new api
forwarder: port to new api
osd: port to new api
qt4-gui: port to new api
rms: port to new api
core: implement new api for handling plugins

Plugins implement one of the interfaces GeneralPluginInterface or
ProtocolPluginInterface depending on type. The instance implementing this is
separate from the instance of Licq::GeneralPlugin or Licq::ProtocolPlugin that
provides the interface to the plugin for other plugins.

Both Licq::GeneralPlugin and Licq::ProtocolPlugin are extended by
LicqDaemon::GeneralPlugin and LicqDaemon::ProtocolPlugin respectively to
provide an extended interface for internal use in plugin manager.

This provides a cleaner separation between plugins and the core.
api: remove old plugin api headers
Support casting plugin to internal interface

To get access to the internal ICQ interface, one can now write:

Licq::IcqProtocol::Ptr icq = plugin_internal_cast<Licq::IcqProtocol>(
    Licq::gPluginManager.getProtocolPlugin(LICQ_PPID));

Instead of the old way:

Licq::ProtocolPlugin::Ptr icqProtocol(Licq::gPluginManager.getProtocolPlugin(LICQ_PPID));
Licq::IcqProtocol* icq = dynamic_cast<Licq::IcqProtocol*>(icqProtocol.get());

It was neccessary to keep hold of icqProtocol until one was done with icq to be
guaranteed that the protocol hadn't been unloaded. This is now handled
automatically.
qt4-gui: use Qt signals instead of plugin helper to handle signals/events

If a Qt signal is sent to a object that lives in another thread, the signal is
queued in that object's event loop and delivered in that thread.

Since this was what the helper class did, but using a std::queue and a pipe, it
could be removed in favour of the native solution.
Merge branch 'master' into refactor-plugin-api
Remove TODOs that have been fixed on master
core: use boost::make_shared when creating plugin instances
Merge pull request #25 from licq-im/refactor-plugin-api

Refactor plugin API