Fixes for strict compilation with gcc 4.7
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` `getCausalType` and `asString` free functions to member
functions of the class.

Retain create/destroy free functions to keep menu interface as similar
as possible. Keep asString for `CausalType` (now
`FourVector::CausalType`) enum as a free function as it is not truly
part of the FourVector interface. 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
Implement pp6calculator Day 3 Homework Part 1

Create new `ThreeVector` class to factor spatial vector functionality
out of `FourVector`. Provide same operator system as for `FourVector`.

Refactor `FourVector` to hold an instance of `ThreeVector` to represent
the space-like component. Reimplement methods and operators to use this
instance as needed.

Change value of `FourVector::c` to be unity to ensure natural units are
used for upcoming work with particle enrgy and momenta.
Implement pp6calculator Day 3 Homework Part 2

Implement `Particle` class with interface as required by Day 3
homework design study.
BUGFIX : Correct indices used in invariant mass calc

Invariant mass calculation swapped indices for muons and antimuons.
Results were similar enough that error wasn't spotted. Day 3
implementation resulted in discrepancy in results and lead to bug
being identified.

Correct indices used for each array and validate against Day 3 results.
Implement pp6calculator Day 3 Homework Part 3

Reimplement solution to Day 2 muon analysis using new Particle and
FourVector classes. Add internal struct to hold arrays of event ids
and Particles to help manage and link these values.

Count number of mu- and mu+ as before, and provide new function
`createParticles` to create the internal `EventArray` struct using
this count to initialize the arrays.

Calculation otherwise proceeds as before.
Modified streaming operators for FourVector and ThreeVector so that output of ostream operation can be read by istream operation.  Added an extra calculate_invariant_mass method for vector<Particle>.
Complete pp6calculator Homework Exercise for Day 3

Update README with information on completion, fix minor typo in top
level menu information.