Fixed some issues with parallelization

*Changed names of functions for turning on the GPU. Now
NEFGPUInterface.(set/get)NumDevices instead of
(set/get)RequestedNumDevices.

*Changed functions in LocalSimulator for creating and ending a run.
The functions initRun and endRun should now be called at the beginning
and end of a simulation run, respectively. initRun takes a boolean as
an argument specifying whether the run is interactive or not.

*Fixed an issue where data was not being returned from the GPU when
doing an interactive run.

*Fixed multithreading so that it doesn't create a GPU thread if there
are not GPU nodes (even if GPU is on), and doesn't create more threads
than there are nodes to execute on the CPU.