Use strong typing for token ID

Allow for Token implementations to use strongly-typed IDs instead of weakly-typed Strings. This should help prevent errors such as passing the wrong value.