Performance optimizations and memory management

Added some benchmarks to secure channel and played around with improving its performance, also started using a sync.Pool for message buffers.
I had started writing code for a compression pipe layer (also the cause of my moving duplex into its own package) and I needed a nice way to negotiate a compression algorithm, I have since scrapped the compression code for now (it needs some more serious thought) but I figured it was fine to still export this method as it is quite useful.