replace push/pop with push_back and pop_front

This is because of the recent libcollections reform. There was a bug in
the old code: I assumed that for a ring buffer, push would push on one
end, and pop would pop off the other end, but this was not the case, pop
and push both acted on the same side of the buffer. This has been fixed
now, and it demonstrates that the new, explicit names are better.

The bug in the old code also affected performance measurements. Instead
of averaging the last 512 measurements, it averaged the first 511 and
the latest one. In practice the results should not differ by much,
because 512 measurements at an interval of 30 seconds is still more than
four hours of rendering, and the (theoretical) contention when rendering
starts seems to be diffused out after a few minutes already, so the
impact on the final average is minimal. Therefore, I think my previous
measurements can still be considered to be valid.
replace lodepng with rust-image

There was nothing wrong with lodepng, but rust-image is a Rust-only library.
It takes longer to compile, and its compression ratio for png seems to be
slightly worse than that of lodepng. But, it _is_ 100% Rust!
fix numerics reform breakage by explicitly using Float and FloatMath
use external time crate
put Cargo.lock under source control

Because binaries should put their Cargo.lock under source control.
add command-line options to run in master or slave mode
replace fail! with panic!
allow specifying the port in master mode
add sender to send render results over network
implement the send task
print send task result
implement merging received images
implement pop_iter again

I just removed it from master, but it _was_ used in this branch, not
with a `RingBuf`, but with a `Vec`. So now this has a specialised
`pop_iter` for `Vec`. Again, I liked the generic one better, but this
suffices for now.
update TcpStream::connect