By utilizing dataclasses which are frozen, we enforce the immutability
of the data as well as ensuring that the proper data is passed in and
around without the need for runtime checks. Remove some implementations
of methods that we get for free from dataclasses as well. Change tags
from a list to a frozenset since it does not make sense to allow the
same tag to appear in the tags list multiple times and once tag
processing happens we do not want to modify them. Removed a number of
init methods which are no longer needed to be open coded.
Assisted-By: Claude Code 2.0
Change-Id: I3d04ee9ff6548713fbbb2dbc6c388524e5ba16d3
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>