Added LRU Cache for Prepared statements to prevent memory leaks

This PR is related to issue #184.

A global cache for all connections is used to limit the total amount of prepared statements an instance of gocql will retain in memory. This will also improve performance for queries where they are prepared on different connections for the same host.

Slice was used as it will provide consistent performance with frequently used queries versus using a map which has a random ordering of elements.

The cache is written with thread safety in mind and can be sized up and down at run time as sessions are created with varying sizes.
I'd feel more comfortable if the testing were a bit more extensive, i.e. if the test could include more data points to verify the entire state of the cache after each mutation. I'm wondering if the test could be more data driven - e.g. you pump in an array of (entire initial cache state, mutation operations, entire expected cache state) data points. I think this could help flush out subtle caching and ordering bugs.