implement `visitObject()` so the directives can be applied to objects.
I have applied them to all mutations and tests all still pass.
NOTE: i feel like there must be a way to abstract and reuse directive
definitions as it's very repetitive, but I'm a bit too brain dead today
to think of an elegant solution