In #140 I outlined why I thought EdgeLabel should be restructured. This PR does the easier flip side, which is to restructure NodeLabel. Unlike EdgeLabel, NodeLabel doesn't have any extra information other than a string, so this PR just makes NodeLabel into a str.
Lots of possibly unrelated type annotations added, to help mypy track down all the uses of NodeLabel.
node_labels is just a set of NodeLabels and can be accessed directly instead of via getter and setter methods.
In #140 I outlined why I thought EdgeLabel should be restructured. This PR does the easier flip side, which is to restructure NodeLabel. Unlike EdgeLabel, NodeLabel doesn't have any extra information other than a string, so this PR just makes NodeLabel into a str.