Implement tracing

The tracing function works now. The UX leaves a bit to be desired, but I've
tried to make it sort of intuitive. When you go into trace mode, as I've said
before, the canvas goes grey and you can't edit it. It shows the path that the
robot is actually drawing, which may be different from your the points in your
current workspace. If you navigate back to the controls view when it is NOT
running, then the workspace points get sent to the robot. I didn't want a
separate send button because there are already too many buttons (and the grid of
two rows and four columns is perfect as it is). It was a little annoying to
always go back and forth to start the program and then to do the tracing, so I
made the trace button automatically start the program (and send points if none
have been sent before). When you stop tracing (to work on another shape), the
program continues on, so you have to go back to the controls page to stop/reset
it. I'm open to other ideas, but I think this works fairly well.

To trace the robot, the client synchronizes its information with the server, and
then interpolates until it gets to the next point. When it is near the end of
interpolation, it starts syncing on each update until the next drive/rotation is
begun.

Also, while I was doing this, I fixed the deepCopy function so that it actually
does a deep copy. Before it was setting nonexistant indices instead of using the
push function -- maybe it was turning it into an object or something. I'm not
sure. But it does a proper deep copy, returning an identical array, now.