NO_ASSOC is a 400 which is a LuminosoClientError, I think
json.loads the error message in the case where the HTTP status code is non-success, because that's what it does in the other case
get rid of root_url as a parameter, because nobody used it and it didn't actually work
Stop trying to show the upload's job number in the upload script.

(Uploads don't usually have or need job numbers anymore.)
Multilingual support: Make sure to pass on the 'readers' option to docs/recalculate.