move ready code to end of script

this ensures all the functions, variables etc are available
("instantiated") before the ready function runs.

personal preference, but I prefer reading code this way too. tells me
everything the program can do and then at the end tells me how it starts
up. (to change that so the focus on where the program starts running, I
would move all the code details to other script files and this one would
just contain the code to kick things off. on larger projects, I prefer
that approach.)
protect from global scope

wrapping code in a function like this (an IIFE: "immediately-invoked
function expression") protects variable and function names from being in
the global scope. prevents potential issues with other scripts conflicting
(using the same variables and overwriting your data/functions).

it's not a high risk, but it's tricky to debug if it happens so it's a
practice to reduce that risk.
remove `getQuizzData()` function

- we don't need to wait for the DOM to be ready to assign the quiz data
  to a variable, so I've moved that to the variable declaration
- in the ready function, we call `displayQuestion` directly to kick off
  the quiz
move displayQuestion function to top

since this is where the script kicks off, I've placed it first.
it's not necessary to structure a script this way, but I find it helpful
to have a consistent approach (for when I come back later to edit)
use jquery to create answer buttons

an example to demonstrate how to use jquery chaining to create a button and set its value and content.
using the DOM is fine though, this is just FYI
add TODO for event delegation

use event delegation instead of creating new event handlers for every
answer button on every question. a single event handler should be able to
handle any answer!