Jobs can now be submitted via client and they are added to the list in Grid and the Queue in Scheduler.
Implemented get_job, can now get jobs in json form from /job/ID
Nerfed GridService, the most useless class to ever exist.
Added missing import for parse_qs
Moved timestamp creation into Grid. Created new timestamps for Nodes and Jobs.
Work Units can now be added to the queue, the scheduler will find them in the queue and allocate them to a job. Also added a GET for all nodes. Work Units are not actually sent to Nodes yet, just the request, no data.
Fixed job allocation. Made GET available for list of all jobs.
Added an important comment to the Scheduler.
Server/Node back and forth completed. Node creation of processes completed. See extended description for more details.

This was a long commit that would ideally be smaller ones however as I
was changing a number of small things at the same time they all kind of
got lost in the overall getting things to work process, so here is a
list of things done.

- Nodes will now automatically detect how many cores are available
- Nodes can now receive a Task which is a Node representation of a Work
Unit
- Nodes can now take a Task and execute it, monitor for its completion,
then inform the Server.
- Nodes, while executing a task, write the stdout and stderr to files
and reads in from stdin
- Nodes now have two threads. One for the heartbeat, and one for the
process monitor.
- Modified the work unit dict transform to include more information
about the job so that requesting a specific work unit isn't totally
devoid of information relevant to that work unit such as the
executable, flags and walltime
- Renamed command to flags, command is now a dynamic property that
combines the executable and the flags

To Do:
- Send input files to Node along with the Task
- Send output files to the Server when complete
- Store output files on Node in a proper location
- Clean up output files on Node once they have been sent to the Server
- Remove nodes from the list when they go offline
- Make it possible to dynamically change the Scheduler used
- Properly handle the case of failing to connect to the Node when
attempting to send the Task
- Restructure jobs such that they can handle the fact that files wont
be available immediately (Haven't decided how best to do this yet)
- Authentication Layer
- Tidy up and reorganise the code as it's gotten a little messy at the
moment
- Rename views to controllers as they should be
Files are no longer automatically added to the queue and need to be marked as READY first.
Moved the control of a Job's RUNNING status to the Job class.
Jobs are now added to the queue when status READY is PUT to /job/ID/status.
Updated Tasks to have an ID and Status so that they can be created without being run immediately.
Fixed InvalidJobStatusException message in Grid
Updated how a task determines it has finished to take into account its multiple states.
A Task no longer takes a filename immediately, but gets it when the file is sent to it in a separate request.
File pathing changed. Node outputs to proper directory. Work Units now have IDs. Node requests file from Server before readying Task.
Server can now accept output files.
Node now transfers the stdout and stderr files back to the Server when finished!
Refactoring/Reordering/Reorganising/Commenting