text: Title: Add strict mypy type annotations to the codebase
  Body: We want all existing functions to have strict mypy type annotations.
  
  Contributors: we could really use your help with this effort! Adding type annotations (that pass mypy with [--strict](https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-strict) flag) to every function in the codebase is a lot of work, but it will make our code much more robust and help avoid future bugs.
  
  Just start with any one file and help us add type annotations (that pass mypy with [--strict](https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-strict) flag) for the functions in this file. You can make a PR that only covers one file which shouldn't take that long.
  
  To get started, just run:
  ```
  mypy --strict --install-types --non-interactive cleanlab
  ```
  and see which files it complains about. You can add strict type annotations for any one these files. After you have saved some changes, you can run the above command again to see if mypy is now happy with the strict type annotations you have added.
  
  Also check out:
  https://github.com/cleanlab/cleanlab/issues/307
  https://github.com/cleanlab/cleanlab/issues/351
  https://github.com/cleanlab/cleanlab/issues/407
  
  For help with getting numpy type annotations correct, look at this PR: https://github.com/cleanlab/cleanlab/pull/585
  
  Another example PR that added good type annotations for one file: https://github.com/cleanlab/cleanlab/pull/317
  
  You can similarly copy these patterns for other files.  The rule of thumb here is that changes in the PR should have fewer `mypy --strict` errors on a per-file basis, without the total number of errors going up for the entire package.