Empty abstract class enforce structure
To build on @Jesse C. Slicer's comment above: interfaces are for defining contracts, whereas abstract classes are meant to add some base implementation code.  An abstract class without any implementation code does not add anything an interface does not already provide.  Even worse, it blocks inheriting from other (potentially useful) classes.

Relationships can be defined either way.

You are free to provide an abstract class to callers which takes care of some of the base functionality, or you can extract an abstract base class during a later re-factoring pass if you like, but your API should still stick to the interfaces as much as possible.