ACK Handling

Per ticket #1 here is pull request (details are in the ticket and the commit message), but in a nutshell:

ACK handling tidied up to be per-subscription (per spec) vs per sub-nection (subscription+connection hybrid).  This was causing issues for us when we had clients who had combinations of client-ACK and auto-ACK on a single connection.

Testing has been performed (it used to break pretty regularly, now it has run through a number of test cycles correctly without error), but I definitely wouldn't call it 'stress-tested' :)

Thanks
Doug