Swap abstract class for trait

This makes it easier to provide the required implicits when constructing a client instance.