serialize interpreter lock access to fix highlighting

The interpreter's initialize() method grabs a copy of the interpreter's
namespace to indicate the set of initial variables, which the editor
uses to highlight JES's built-in functions. However, it didn't wait for
the interpreter to finish before grabbing these variables, and usually
the Thread wouldn't have started executing before it got to that
section.

In order to provide a more general fix, I added a semaphore to
Interpreter. When a new thread is started using the Interpreter, the
launching thread blocks on a semaphore until the new thread has
acquired the interpreter lock. This ensures that any interpreter lock
accesses happen in order from the point-of-view of the launching
thread, whether it's locked from inside an execution thread or locked
by the launching thread manually.