Refactor read_one_org()

What was wrong with the old version?

1.  The return value was BOTH an error flag and the value read from the
device.  This is terrible practice, resulting in the calling code
treating the return value sometimes as an error flag, sometimes as a
read flag - very confusing and error prone

2.  Dead code.  The communications type was checked, but nothing was done
with the check, serial or tcp

3. The critical section was locked using an unreliable method that can
leave the section permanently locked and hanging the application.

4.  Spaghetti code.  The status message is formatted in three different
places.  In one of these places, almost unnoticeable, the return count
was incremented.

5.  A status message is formatted even when the routine is running in a
worker thread and so the message will be discarded.

6.  Sparse and incomprehensible documentation.