Divided matcher height object into separate leftHeight and rightHeight variables

Summary: Some matcher items were having their height set improperly when loaded from JSON due to a
setState-related race condition, as old height values for one side might override the expected
value when setting the height for another side. Now, the height logic is divided up into leftHeight
and rightHeight to avoid these types of problems. Fixes T2734.

Test Plan:

- Check out this change.
- Run `make subperseus` to carry changes over to webapp.
- Run webapp (doesn't repro in local Perseus).
- Grab the JSON from [here](https://www.khanacademy.org/math/geometry/intro_euclid/e/geometric-definitions/edit/x1d32270c678d3a11?mp-r-id=WM3JBkQ=) to get a sample broken question.
- Go to the [item creator](http://localhost:8080/devadmin/content/items/new) and load that JSON in via Developer JSON mode.
- Notice that the cards are sized correctly.
- Play around with the card contents and verify that the sizing remains consistent with expectation.

Auditors: jack

Subscribers: eater