Change AttributeKey matching to singleton matching

This pull request is the fruit of the discussion around issue #83.

Removes the ClassTag and makes it impossible to generate imposter keys, forcing a one to (one or none) correspondance between key and entry whereas it had been possible to generate "imposter" keys by using the same name and type.

__If we wanted to allow the creation of multiple keys that could access the same value, this should be rejected.__ eg, if [this test](https://github.com/http4s/http4s/blob/topic/SingletonAttributeKeys/core/src/test/scala/org/http4s/AttributeMapSpec.scala#L26) should fail, which is the behavior on master.