Restructuring type hierarchy and adding NetworkAddress and Version types