Annotate type classes for better error messages

make use of the implicitNotFound annotation to give better compiler errors when there is no available instance of a type class