Add program API and switch internal implementation to use programStack as demoed in lecture.
Implement A2 required task #1.

Allow pushing of variables as operands.
Implement runProgram:usingVariableValues: and variablesUsedInProgram:.
Implement A2 required task #2.

Implement descriptionOfProgram: using descriptionOfTopOfStack:.
Helper function numberOfOperandsRequired: also created.
First attempt to limit parentheses to only some operations.

Order of operations between +, -, *, / is respected, although parentheses will be included for multiplications with a single number.
Never use parentheses around multiply or divide, always use around add, subtract.
Use descriptionOfProgram: for history label.
Use updateDisplay method to update history.

Fix crash when using switchSign operation on negative operands.
Add buttons that push variables into the CalculatorBrain.
Use runProgram:usingVariableValues: instead of performOperation: to update display.

Create testVariableValues property within CalculatorViewController that contains NSString keys and NSNumber values.
Correct behaviour of switchSign operation when detecting closing parentheses.
Display values of variablesUsedInProgram: in label.
Extract updating of display with results to updateDisplay method.
Add "test" buttons to set testVariableValues to preset values.

Set x, y to 0 if testVariableValues is nil.
Clear testVariableValues with clear button.
Use separate methods to update history/variableValues and display.
Implement Assignment #2 Required Task 4, Undo button.

When user is in middle of entering number, Undo acts like backspace.
Once all digits have been removed, result from current program is displayed.
When user is not in middle of entering number, Undo removes top item from program stack and updates UI.
Refactoring to reduce LOC.
Use segmented control to provide different variables values.
Set UIBarStyle to Default.
Update .gitignore with xcuserdata/.