small bugfixes

* Fix bug where when getting the next ID for a prefix which has no
  zettles, the application could crash
* Fix bug where nested YAML structures were not parsed correctly due to
  line stripping behavior during frontmatter extraction
remove debug print statement
add links and internal_links to zettle list
deduplicate and sort tags
zettle list now emits JSON

Also, tags with "/" in them are now split automatically.
add "zettle tags" and "zettle frontmatter"

We now use PyYAML to parse the frontmatter rather than rolling our own,
so as to support arbitrary data.

Tags are now supported, and can either be bare strings, or
hierarchically nested using lists.

This also changes the behavior of title extraction: the `title`
frontmatter element now takes precedence over the h1 derived title.
bring over disavow and query-webpage

These are pretty much the only two things from charles-util that I still
use, so it will be easier to maintain them here.
switch to dark themes
zettle: fix broken sequence progression

This fixes a bug where if zettles with mixed prefixes exist on the same
day, the sequence number does not always advance properly when using
`zettle new` because the `last_zettle()` function did not have the
correct sort priority.
lock: prevent swaylock from starting multiple times
displayman: use /bin/bash

Starting via /usr/bin/env seems to break signal handling after the first
time the signal handler is triggered. This should fix the issues I've
been seeing where displayman will just stop responding.

Presumably this is because the pkill -USR1 is killing the `env` command,
which doesn't have a signal handler specified.
displayman: workaround gammastep, fix wallpaper
lock: workaround gammastep and swaylock crashes
remove dead code
utils/zettle: introduce --edit
make typora floating
utils/zettle: fix hostname detection

This switches to platform.node(), which is both faster and will
hopefully stop giving me ipv6 addresses on macos.
fix title isuses
add graphviz subcommand