This was quite a long one, since I decided to both implement support for
constructing exponent ops, and also made sure that the expressions get
reasonably optimized once they are constructed.
Notes:
The exercise 2.37 on Hexlet's site has an error, noted in the comments.
Also, their page for exercise 2.38 should probably have 0 tests.
And finally, I did not calculate the exact number in the final exercise
2.43, but I included a relevant discussion.