this makes me really worried. Why are we explicitly planning here?  Why doesn't a naive recursion work:
```scala
def ^(power: Int)(implicit ev: =:=[R, C], ring: Ring[V]): Matrix2[R, R, V] = {
  assert(power > 0, "exponent must be >= 1")
  if(power == 1) this.asInstanceOf[Matrix2[R, R, V]]
  else this * ( this ^ (power - 1))
}
```
I think all the planning should be in calls to optimize, else we are going to have planning code spread all about.