modify index.html scrape algorithm

- I realized that I also needed to have the filenames that correspond to
  the chapter and section names
- Now the dictionary stores tuples containing the name of the
  chapter/section and the html file name
generate chapter directories

- also, create global variables for directories (I know, I know...)
create files for lessons
parse html file and create markdown file

- goes through each section html file and grabs selected portions from
  them
    - learning objects
    - actual lesson content (including headings! this was hard!)
    - key takeaways
- is then pieces them together with markdown syntax into a new file
update readme

- add dependency info
- clean up whitespace
create markdown for non-content files
generate index.md at chapter level

- generalize the index.md generation function so it will generate any of
  the required index.md files (course level, chapter level) based on
  parameters
add learning objectives to chapter level index.md
generate chapter reviews

- also generalize function for previously creating index.md file to
  create any type of file
generate section exercises

- also rename the main content parsing function to something more
  semantic
generate keywords.xml file for course
add sections headings to chapter level index.md
semantic bug fix

- chapter_num is an int, so in the string substitution it should be
  represented as '%d'
bug fix in identifying actual content

- use regex to look for chapters that being something like "Chapter: "
  instead of simply using the presence of a colon
misc bugfixes

- add dedicated file_write function for writing in utf-8 encoding to
  prevent errors from BeautifulSoup's unicode output
- make parse_section function more versatile for different page layouts
reorganize parse_section function

- parse_section was growing absolutely monstrous so I broke each
  distinct step into its own function
include 'callout' and 'blockquote' tags in lesson content
fix key takeaway parsing
rewrite parsing to include proper bullets in markdown

- the parse_learning_objectives function is essentially the same as the
  parse_takeaways function (they operate identically) so I redesigned
  parse_keytakeaways so it can be used as a wrapper for
  parse_learning_objectives
- in some cases, the prescence of a table element in the original html
  can translate to a shitton of newline characters in the markdown file,
  so there is mitigation for that
style edits, make more pythonic