improve separate_first_last

add ability to:

- add support for “First Last” format as well as “Last, First”
- add ability to set to overwrite
add qs.to_bool method

since Python has no good method to convert strings to bools, this
should be a good way to handle this.
fix bug in separate_first_last

before, it was raising an error if the overwrite arg wasn’t supplied.
add __getitem__ method to cv_tools

add ability to access a csv row via csv[n]
add check for when an error pops up on bad names
add support for matching full length middle names
major rewrite of add_student_ids

inspired by gscs work. add support for:

- better detection of whether there is a good 1:1 match between csv and
dv
- better variable naming and logic for easier refactoring in the future
- add support for non-enrolled students, as well as determining whether
to use nonerneolled students at all (defaults to true)
- better logging
improve qs.dumps and use it in logging module
add method for finding duplicate dicts in a list

check for duplicates in a list where multiple elems in the list have
the same value for a given key.
add ignore_deleted_duplicates to get_students

ignore_deleted_duplicates is for removing unneeding students from the
returned object from get_students. This is great if the student names
need to be unique, but there are deleted/unenrolled students that share
the same