Implement pp6calculator Exercise 1 solution

Add main program for pp6calculator, and perform the classic "Hello
World" output to complete Exercise 1.

Update README with system requirements and build instructions using
the GNU/Clang compilers.
Implement pp6calculator Exercise 2 solution

Query user to enter two numbers, and report product of numbers to
stdout.
Implement pp6calculator Exercise 3 solution

Provide interface to allow user to select one of the four arithmetic
operations and then input two integers. Apply the operation to the
numbers and report the result to stdout.

Check input for errors at all stages, and report these to stderr before
exiting with a failure.
Implement pp6calculator Exercise 4 solution

Wrap selection of arithmetic operator, numbers and result output in
while loop to allow repeat operations. Exit loop on user entering
'q' as operator.
Implement pp6calculator Exercise 5 solution

Refactor arithmetic operations into functions taking the input
arguments and returning the result. Calculate results using these
functions.
Implement pp6calculator Homework Exercise Part 1

Refactor number input into getNumber function which performs error
checking and returns the input number.

Create proper menu of commands using numbers rather than symbols to
select operations. Handle operations and quit option in single
conditional block to allow easy future expansion.

Neatify prompts and result output so that each are clearer, using
style inspired by ipython interpreter.
Implement pp6calculator Homework Exercise Part 2

Add operation to calculate x-intercept of straight line (y=mx+c).
Provide a new menu item which when selected asks the user for
the y-intercept and gradient of the line. Pass these numbers to
new intercept function that solves y=mx+c for the y=0 case. Output
the returned value of x to stdout.

If a zero (i.e. flat) gradient is entered, report a divide by zero
error and continue back to menu.
Implement pp6calculator Homework Exercise Part 3

Add an operation to solve for the roots of quadratic equations in the
case that the roots are real. Implement a quadratic function that takes
the coefficients and a boolean which selects whether to return the
positive or negative root.

Add a new item to the operations menu which when selected queries the
user for the quadratic coefficients. Check for two main error cases:

- Imaginary roots, in which warn that no solutions are possible (well,
in this implementation anyway).
- Zero quadratic coefficient.

Report errors in both cases before continuing to menu. Otherwise,
call quadratic function with coefficients, once for the positive
root and once for the negative root.

Add special result output case for the quadratic operation to output
both roots. Output other operation results as before.
Implement pp6calculator Homework Exercise Part 4

Add operations for calculating the lengths of 3- and 4-vectors from
their components. In each operation, query user for the vector
components in turn, passing these to the appropriate length calculating
function and outputting the result to stdout.

In the 4-vector case, report an error if the space-like part of the
vector is larger than the time-like part and continue to the menu.
Implement pp6calculator Homework Exercise Part 5

Provide operation for calculating invariant mass of two particles.
Query user for the components of each particle's 4-vector and pass
these to new inv_mass function if both vectors are timelike. If either
vector is spacelike, report and error and return to menu.

Implement inv_mass function in terms of the length() function for
4-Vectors to reuse code.
Complete pp6calculator Homework Exercise for Day 1

Add a News section in README to note that Day 1 Homework has been
completed!