Extract UID/SID generation logic into a new class: UIDGenerator
Simplify UID generation logic

This loop is not required because we already set current_uid[pos] to 'A' before recursing if current_uid[pos] is 9
Use std::string internally in UIDGenerator, move UUID_LENGTH into the class as a constant