Adding semi-group and monoid tests
100% test coverage for useful
Adding endo functor
Adding endo functor