WIP: Pass JSON message lengths as fixed-length numbers

Avoids needing to buffer on the Python end, which can cause trouble
(poll says there's no data waiting, because it's in the buffer, so we
just block forever).

TODO:
- make the same change for the replies
WIP: GUI
If the user cancels, don't report it back to them as an error
Abort feed downloads when it's time to run

Otherwise, the OCaml waits for them to finish before running.