Don't offer to join beyond maximum participants

This is patch checks to see how many participants are sharing an
activity. If the maximum has been reached, then the Join palette menu
item is not shown.

This patch depends on two patches to sugar-toolkit-gtk3 (#138) that
enable setting max_participants in activity.info and only impacts
activities where that field has been set.

Also, since we added caching of activity bundles in the toolkit, we
take advantage of that caching in view/viewhelp.py,
view/viewsource.py, and journal/misc.py to reduce file I/O.

Replaces #339
Stop a null device crashing the journal
Merge pull request #365 from SAMdroid-apps/color-devices-crash

Stop a null device crashing the journal
Release 0.101.7
Fixes #2382, don't star journal entries from the object chooser
Flake8 fixes
Do not overflow transfer palette

Remove line breaks from description text in incoming files
and limit the label length with ellipse.

Fixes #1661

Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>
Block KeepIcon callback in ExpandedEntry

When updating ExpandedEntry widgets to render a new journal
entry, it updates the state of the KeepIcon.

If the previous entry that was rendered in the ExpandedEntry
had a different value for keep, then it will trigger a toggle
event, since both uses the sake KeepIcon widget.

This callback is processed right away, so the other widgets still
contain previous journal entry values, and since this callback
triggers a metadata update, the old journal entry values are store
in the the new journal entry metadata, and get mixed.

Fixes #4770

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