Do not instantiate Joiner/Splitter

This patch centralized Splitter and Joiner instances to ByteBufUtils,
from where they are used -- reducing object allocation and CPU usage
(due to checks).

As a bonus, this optimizes splitters on single characters to the
simplest possible form, further reducing overhead.

Change-Id: If635656af49967cd17333ebbeef3452091edd5d5
Signed-off-by: Robert Varga <rovarga@cisco.com>