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