7594: power rules correction so (x**y)**z != x**(y*z)

fixes #7594
This whole routine has been refactored.