more complete QgsMessageBarItem

inherits from QWidget to allow further editing.

The global idea is to have a better control on message once they are created and also while they are shown.

The structure of a message is kept coherent: it is made of a title, text and widget. All of these are optional.
It also contains the info of duration and level.

There are very minor API changes:
* QgsMessageBar::createMessage now returns a QgsMessageBarItem instead of a QWidget. This won't be a problem in python
* I removed 2 of 4 of the createMessage methods. I kept the only one used in plugins on the repo as of today

so now pushItem should be used instead of pushWidget. If pushWidget is used with an item, it will also works since it tries to cast widget to QgsMessageBarItem.