VertexDefTrait and EdgeDefTrait are currently completely separate, despite they fact that they have common functionality. WithPropertyDefsTrait already awkwardly looks like a superclass for VertexDefTrait and EdgeDefTrait.
[x] Create ElementDefTrait that extends WithPropertyDefsTrait
[x] Factor common functionality into ElementDefTrait
[x] Elevate propertiesMustBeDefined from VertexDefTrait to the ElementDefTrait
[x] Replace WithPropertyDefsTrait with ElementDefTrait where appropriate
VertexDefTrait and EdgeDefTrait are currently completely separate, despite they fact that they have common functionality. WithPropertyDefsTrait already awkwardly looks like a superclass for VertexDefTrait and EdgeDefTrait.