Extend notifications model

Add a buffer to the model. This buffer stores the notifications
that are received from the DBus interface. These notifications
are indexed by application name.

Add a new signal for when a buffer is emptied, for an specific
application name.

Considering that the notifications are shown in UI elements such
as Palettes, which are generated on demand, it is necessary to
store notifications so they can be added later.

Basically, this approach is follows a publisher and subscriber
model.

Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>
General notifications container widget

Add a new widget, called NotificationBox, that handles all
the UI logic for displaying notifications in a Palette. The
widget interacts directly with the notifications model.

Using this widget, any sugar shell palette can display
notifications, by simply specifying an application name
to which it belongs.

Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>
Listen notifications from activities tray

Connect to notifications model signals, so the activities
tray, so it can show and hide badges in all the tray buttons.

For doing this, it assumes a covention that these buttons
provides a show_badge and a hide_badge methods.

Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>
Add system notifications widgets

Add a NotificationPulsingIcon widget, that can draw
badges and simplifies the icon name and colors setting.

Add a NotificationButton, that will be used for system
notifications in activities tray. This button supports
the badges convention.

Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>
Add or remove system notification buttons

Check if there is no button for the received notification,
and create a new button to include it in the activities
tray.

Check if there is a button for the cleared buffer, based
on the application name, and remove it from the activities
tray.

And with this, we already have system notifications that
follows the behaviour described in the design discussions.

Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>
Update corner notification icon

Move corner notification icon to the top left
corner of the screen.

Make frame visible when clicking on the corner
notification icon.

Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>