use a generic factory function to create __add__
added support for broadcasting for all other ops