Bug Fixes, packet pooling, other changes

Technical Description:
- New utility classes. ObjectPool and PoolableObject
- Packets are now pooled on both client and server. The server and
client automatically handles this for you behind the scenes. This fixes
#14
- Client and server now terminate connections on communication errors.
This fixes #12
- Fixed an issue with dualstack clients failing on UDP connection
- Fixed  potential race-condition issues on client library
- Security enhancements pertaining to UDP messages.