This patch adds asynchronous evaluation for session blocks in Python. It also adds functionality to implement async session eval for other languages using ob-comint.el. To test the attached patch, add ":async" to a Python session block with a long computation (or "time.sleep") in it. Upon evaluation, your Emacs won't freeze to wait for the result -- instead, a placeholder will be inserted, and replaced with the true result when it's ready. I'll note how this is different from some related projects. ob-async implements asynchronous evaluation for Babel, but it doesn't work with sessions. emacs-jupyter, ein, and ob-ipython all implement asynchronous session evaluation, but only for Jupyter kernels. Jupyter is great for some cases, but sometimes I prefer to use the built-in org-babel languages without jupyter. The new functionality is mainly implemented in `org-babel-comint-async-filter', which I've defined in ob-comint.el, and added as a hook to `comint-output-filter-functions'. Whenever new output is added to the comint buffer, the filter scans for an indicator token (this is inspired by `org-babel-comint-with-output'). Upon encountering the token, the filter uses a regular expression to extract a UUID or temp-file associated with the result, then searches for the appropriate location to add the result to. This is my 2nd attempt at this patch [0]. I have also ported it to an external package [1], but would like to have this functionality in Org proper, to permit better code reuse between async and sync implementations. The external package also includes an R implementation that I regularly use, as well as a Ruby implementation, but I've left these out to keep this initial patch smaller, and also I need to confirm copyright assignment on the Ruby implementation which was externally contributed. [0] https://orgmode.org/list/87muj04xim.fsf@jaheira.i-did-not-set--mail-host-address--so-tickle-me/ [1] https://github.com/jackkamm/ob-session-async