Staged power function. Adapted from: https://scala-lms.github.io/tutorials/02_basics.html power-1 trivial power function power-2 power function with memoization