Fixed point conversion and point sending

In the function that calculates the amount of time to rotate, there was a typo
(I had `x2 - x2` instead of `x2 - x1`). I fixed that, and then took a closer
look at why things weren't coming out right. I eventually realized that the
coordinates from the web app have the top-left as the origin, but I was assuming
the bottom-left to be the origin. Now, the points get transformed to have the
origin in the bottom-left before they are sent to the server.

I fixed up the edge cases with the points list and cleaned up the code in
general. When you try to send one or fewer points, the program will not accept
it and it will not try to start (I build a new `no_start` mechanism into the
Controller and the BaseProgram to handle this generally). If you upload new
points while the program is running, they will be used the next time you run the
program (the points won't change while the robot is in the middle of drawing a
different set of points).

Also, I factored out some logic into plain functions outside of the Tracie
class. I also made the status messages more useful. It displays how far it is
driving and by how many degrees it is rotating. This made it easy to debug while
I made the program take the shortest path when rotating (another thing I did).
So now it rotates -170 degrees instead of +190 degrees, for example.