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.