Add specific errors subclasses for message_read

When reading a message queue, it is useful to make the distinction
between several possible errors. Add DirectProtocolError exception
subclasses: NoActiveProgramError and EmptyMailboxError.

Also update stop_program and get_current_program_name documentation to
reflect the change.

This is backward compatible as they are subclasses of the original error
Update version to 3.3.0
Move sourcehut first, with GitHub as mirror
Remove out-of-date comment on alpha stage
Add pygame dependency for nxt-screen
Add script to increment version for a release
Minor documentation fixes
Ran isort, black and flake8 on digital sensors

There is still a large amount of work to do on documentation and
Drop support for Python 3.7

Python 3.7 is end-of-life since yesterday.
Add development dependencies

You can install the project in editable mode with dependencies with:

    pip install -e .[dev]
Move stop motor example out of tutorial directory
Add pre-commit configuration

Install pre-commit with:

    pip install pre-commit
    pre-commit install

It will run tests before any commit to detect errors early.
Ran isort, black and flake8
Trim trailing whitespace and run isort on nxt/sensor files
Ran isort, black and flake8 on scripts
Remove empty line at end of issue template
6e7f2e7b — arohrbacher 6 months ago
examples: nxt-screen: add GUI buttons

Implement GUI buttons representing the NXT physical buttons so that the
NXT brick can be remote controlled.
examples: nxt-screen: add more verbose comments
examples: add 'nxt-screen'

utility that reads out the framebuffer of an USB-connected NXT, and
uses pygame to display it's content on-screen

might be handy for owners of a NXT with "broken" display,
wanting to access settings like Bluetooth, pairing, ...