Branch allocation logic

Given all the parsed header change descriptions, allocate files to
branches to use the least number of branches.

Had to add a ScalarTraits<std::string> so that std::string fields can be
read/written properly.