Abstract Ops rewriting allowing custom symbol->name mapping
Abstract Ops rewriting allowing custom symbol->name mapping

Previously, all users of spire-macros had to use the same mapping
between symbols and names. This commit allows users to extend Ops
and produce their own mappings. For example:

    object MyOps extends Ops {
      val operatorNames = Map(
        "$plus$plus" -> "concat",
        "$plus$eq" -> "append",
        "$eq$plus" -> "prepend"
      )
    }

The previous Ops object still exists, so this chagne should not affect
code that is relying on the previous mapping.

adampingel/spire,tixxit/spire,kevinmeredith/spire,rklaehn/spire,JackSullivan/spire,woparry/spire,non/spire,adampingel/spire,guersam/spire,AlecZorab/spire,codeaudit/spire,tixxit/spire,non/spire,woparry/spire,codeaudit/spire,siddhartha-gadgil/spire,guersam/spire,JackSullivan/spire,kevinmeredith/spire,rklaehn/spire,AlecZorab/spire,siddhartha-gadgil/spire