Implement pp6calculator Day 3 Exercise 1 solution

Create new menu for Day 3 exercises and integrate into pp6calculator.

Provide placeholder hpp and cpp files for FourVector operations.
Implement pp6calculator Day 3 Exercise 2 solution

Implement FourVector `interval` and `boost_z` functions in a procedural
style. Update menu items to read in values for FourVector components
from user input and pass to functions.
Implement pp6calculator Day 3 Exercise 3 solution

Create structure to represent a FourVector. Refactor `interval` and
`boost_z` functions to take const references to FourVector instances.
Read user data directly into FourVector member variables.
Implement pp6calculator Day 3 Exercise 4 solution

Hide FourVector struct implementation using an Opaque Pointer, providing
`createFourVector` (including variant to construct with components) and
`destroyFourVector` functions for instance management.

Refactor `interval` and `boost_z` functions to use pointer-to-FourVector
and change menu items to use the new interface.

Provide a `userCreateFourVector` function to return a new instance of a
FourVector created by reading in the components from the user via cin.
Implement pp6calculator Day 3 Exercise 5 solution

Change FourVector from a `struct` to a `class` and move `interval`,
`boost_z` and `asString` free functions to member functions of the
class.

Retain create/destroy free functions to keep menu interface as similar
as possible. Change calculations to message member functions instead of
free functions.
Implement pp6calculator Day 3 Exercise 6 solution

Add constructors for FourVector class, and reimplement free
create/destroy functions to use these.
Implement pp6calculator Day 3 Exercise 7 solution

Make all data members and constants of FourVector private. Provide
getters/setters for the data members. Implement copy constructor in
terms of these getters/setters.

Cache the interval value as a data member of FourVector and recache it
everytime one of the FourVector components is changed. As we expect the
interval to be accessed more frequently than the data members are
changed, this should provide a small performance boost.
Implement pp6calculator Day 3 Exercise 8 solution

Provide copy assignment, add/subtract and streaming operators for
FourVector. Implement streaming operators and addition/subtraction
operators as free operators.

Add 'sum two FourVectors' operation to Day 3 menu and use addition
operators and streaming operators to implement the operation and report
its result.
Complete Day 3 Exercise Solutions