Generalised readWith to readWithM

This function is useful when working with the ParserT transformer but maintaining consistent error handling provided by readWith.