read() returns ssize_t where a negative number is used for errors.
The value was read into a size_t and then checked for <0.
Change to ssize_t to handle the negative number.
Don't directly expose the state change methods. Only expose an activate
method for nodes that indicates if the node should be scheduled or not.
Let the link automatically negotiate two active nodes.
Make some defines for properties.
Use link property to make passive links. Passive links don't activate
the nodes.
Make sure the mainloop quits when quit is called before run.