Improve documentation for the PortValue classes.
Move the port and port value creation methods to a factory class.
Rename port value classes to better reflect their heirarchy.

PortValue is abstract, so worth making that clear in the name. Also the three
subclasses now have the Value suffix which makes it clearer that they are
related.