Add swap ack channel to server/client

This is a small fix for #29. It adds a channel that is used to count the number of frames the server has processed. If the client gets ahead of the server it will try and read an ack and fail, at this point the client should drop the frame, but it is left up to the API user to do so.

I think there are design improvements, but this solves the issue today.
The current [semaphore](http://static.rust-lang.org/doc/master/std/sync/struct.Semaphore.html) does not have a way to do a try_acquire. Which is why it is a queue.