Allow to configure #prefetched messages

To keep existing behavior and have a simple configuration, default value
uses MaxWorkers parameter.
It will allow to have a nice perf boost for SyncConsumer users.

Change-Id: Ifd8bc9f587aeb8a67fc3e28c4ec837d57bff783e
Extract interfaces from Publisher and Consumer

Change-Id: If8c777ed7f9f8c23ad7ae066efb30291da29838c
Expose queue size in the publisher

When a publisher sends messages directly to a queue, one can call
MessageCount property to get the current size of this queue.
It may be useful to build a rudimentary flow control.

Change-Id: I632eda2636d946653898464f50d4b72c19286645
Allow to quickly fill all handlers

To ease debug and prototyping: add a method to set a basic event handler
for all available events.

Change-Id: I0675613074e3c6060537083dd0e3ad11e1137f6c
Allow to pass message properties directly

because of CS0854 we have to create 2 methods instead of having an
optional argument

Change-Id: I53ebb9886fa2082fb3f22d720280e6d6605b95f0
No-op if event handler failure event is not set

Change-Id: I0004fbb833b95c6774ceb0f124390db8577df4eb