[REFACTOR] Rename some bindings

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
[REFACTOR] Correct indentation

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
[REFACTOR] Rename `moduleCodes` to `moduleCodesWithLesson`

Because we are not yet handling any modules without lessons.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
Add `module-has-lessons?` predicate

For checking if a given module has any lessons

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
[INVESTIGATION] Modules without lessons - exam status

We create a `no_lessons_maybe_exams.js` script to find out modules that
do not have lessons yet have exams. This is for testing a soon to be
hacked out feature.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
Support modules without lessons in `document.location.hash`

NOTE: This has not been extensively tested and may be buggy

This is a rather major patch and includes the following changes:

- create a `add-module-without-lessons-to-ModulesSelected!` function.
  We update the `ModulesSelected` hash as lesson groups are being added,
  but that won't work for modules without lessons. We need a mechanism
  for adding such modules to the `ModulesSelected` hash, and this is the
  mechanism. This function is called by `add-module!` and
  `add-module-lesson-groups-from-url-hash!`
- Teach the `preToUrlHashModule-to-url-hash-string` function to return
  the module code for modules without lessons. This function is used to
  convert a module and any selected lesson groups to a representation in
  `document.location.hash`
- Teach the `remove-module-from-document-location-hash!` function to
  remove modules without lessons from `document.location.hash`
- rework the `add-module-lesson-groups-from-url-hash!` function to take
  into account of modules without lessons and allow their addition via
  `document.location.hash`

In addition, we add a manual test that indicates what to look out for.
So far things seem to be working ok.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>