Fix News section to be markdown list
Implement pp6calculator Day 4 Menu

Add new menu for Day 4 exercises and homework, only providing quit
operation for now.
Implement pp6calculator Day 4 Exercise 1 solution

Add template method `getField` method to `FileReader` reading and
returning the supplied field as the templated type. If input fails,
set the failed flag to true and return a default constructed instance
of the template type.

Add supplied `pdg.dbt` to top level of project, and copy it to base
of project build directory so it's easily accessible to pp6calculator.

As per exercise, add operation to Day 4 menu to read in a .dbt format
file, iterate over the lines and print each field to stdout.
Implement pp6calculator Day 4 Exercise 2 solution

Use std::vector to store columns of data from .dbt file read in
by the `pp6day4_io_pdg` operation. Display data by looping over the
vectors and using the subscript operator to access the data.
Implement pp6calculator Day 4 Exercise 3 solution

Use iterators to iterate over vectors of data (columns) in
`pp6day4_io_pdg` to present data to stdout.
Implement pp6calculator Day 4 Exercise 4 solution

Implement ParticleInfo class for querying properties of a particle by
its PDG name or code. Provide public interface as per design discussion
on day 4. Use maps to provide lookup tables against PDG name or code.
Construction takes a .dbt file as input to fille the tables. If the
file is not readable or of the wrong format, the database will be empty.
Use the `size` method to indicate an empty, and hence invalid, database

Add operation to Day 4 menu calling new `pp6day4_check_particleinfo`
function. Inside function, query user for .dbt file and instantiate a
ParticleInfo instance using this file. Perform simple checks on the
resulting instance to test that it contains entries, and that
information on muons and antimuons is returned correctly.
Implement pp6calculator Day 4 Exercise 5 solution

Add operation to Day 4 menu calling new `pp6day4_algorithm_demo`
function. Query user for size of vector to generate, restricting the
size to a number between 10 and 100. If the user enters an invalid
number, simply ask them again.

Create a vector with the required capacity, use `std::generate` to fill
the vector with random numbers from the PP6Lib getRandom function. Use
a `std::ostream_iterator` to report the contents before and then after
sorting it with the STL `sort` function. Also use the `std::max_element`
and `std::min_element` to find the maximum and minimum values if the
vector, reporting these to stdout.
Complete Day 4 Exercise Solutions

Update README News section to note addition of Day 4 exercises.
Implement pp6calculator Day 4 Homework

Add operation to Day 4 menu to call `pp6day4_muonanalysis` function for
implementing the homework solution.

Provide typedefs to build data structures useful in solution

- `Event` : Pair connecting int(EventId) to Particle
- `EventVector` : Vector of Events
- `RunMap` : map string(RunId) to `EventVector`
- `InvMassPair` : pair linking two Events
- `InvMassTable` : multimap double(InvariantMass) to InvMassPair

Factor problem into six main steps:

- Initialize `ParticleInfo` database from user supplied file
- Create a `RunMap` instance and read data from user supplied file
  into this structure
- Extract `EventVector` mapped from "run4.dat" RunId
- Copy mu- and mu+ Events from the run4.dat `EventVector` into
  dedicated `EventVector`s for each type
- Take Cartesian Product of mu-/mu+ `EventVectors`, operation being
  the invariant mass of the combinations and copy the resultant
  invariant mass and the `EventPair` into an `InvMassTable` instance
- Iterate over the `InvMassTable` presenting 10 largest invariant masses
  and the event pair that created it.

No sorting is needed as the multimap used to store invariant masses
sorts the keys (the invariant masses) for us.
Fix some missing headers
Fix bug in display of results of largest invariant mass combinations
Modified files for the start of Day 5.
ParticleInfo modified to use the singleton design pattern.
Particle modified to take advantage of the global point of access to ParticleInfo.  It no longer needs to be given the mass, it can be determined from the PDG code.
Modify previous code to adapt to new Particle interface.