Add graphics framework

Add the SDL graphics framework and code to display a black 640x480
window. The window responds to the escape key to close the program.
Add keyboard handler

Add a keyboard handler to process key up and key down events, and to
keep track of pressed, released, and held keys.
Create ball class

Create the ball class with a rectangle describing the ball’s position
and size.
Draw a ball on the screen

Add a fill rectangle method to graphics for drawing white rectangles on
the screen. Update graphics.clear() to switch to black before clearing
the screen. Temporarily draw a ball in the centre of the screen.

Closes #1.
Add documentation
Merge branch 'feature/draw-ball' into develop
Add frame rate limit

- Add a frame rate limit of 60 frames per second to the event loop.
- Add a stopwatch class template to keep track of time measurements
  and to handle std::chrono conversions.
- Add an sdl::ticks typedef of type std::chrono::duration to
  simplify conversions between std::chrono types and the type used
  by SDL to represent ticks (std::uint32_t).
Add documentation

Add documentation for the stopwatch class template.
Modify stopwatch

- Change stopwatch methods from start/stop to reset/elapsed.
- Extract sdl::ticks out of stopwatch.hpp and into its own file.
- Add a second stopwatch to the event loop for handling updates.
Add ball movement

- Update ball to hold its position as floats rather than in an SDL_Rect.
- Add temporary velocity constants to the ball class.
- Add update methods to the game and ball classes, which update the
  ball's position based on its velocity and the elapsed time.
Minor changes

- Make game::draw() and ball::draw() const.
- Fix stopwatch::reset() to only call clock::now() once.
Reorder stopwatch methods

Put stopwatch methods in alphabetical order.
Add ball physics

- Add a rectangle class and ball::collision_rectangle() to get the
  ball's collision rectangle.
- Add a boundary class to define the area the ball must stay in (and the
  edges on which the ball will collide).
- Update the ball to have velocity member variables (which change when
  the ball collides with the area outside the boundary).

Closes #2.
Merge branch 'feature/ball-physics' into develop
Modify keyboard event methods

Modify the keyboard::event_key_down and keyboard::event_key_up methods
to take an SDL_KeyboardEvent parameter instead of a generic SDL_Event.

Closes #4.
Add paddles

- Create paddle class.
- Add two paddles to game.
- Update game::event_loop to handle input for moving the paddles.
Constrain paddle movement to boundary

- Add paddle collision rectangle.
- Add checks to paddle::update to keep the paddles within the game's
  boundary.
Add documentation

Add documentation to the paddle class.

Closes #3.
Merge branch 'feature/draw-paddles' into develop
Add paddle collisions

Add collisions between the ball and the paddles.