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.
if `dr.position` isn't a name (i.e. the object _wasnt_ a properly formatted object) this will panic. We need to be safe to all sorts of malicious input, and right now our code assumes all sorts of stuff. We should treat any kind of user-manipulatable buffer (both messages and data) very carefully, thinking of how it can maliciously fail on us.

I'd make a method, actually, on the Node. `GetLink(name)` that tests it, and fails with a nice error otherwise. Which forces this to consider the error case. (yay compilers)