Fixed memory leak caused by not calling Peeker.Stop

Not calling stop caused the peeker to stay active until OOM happened,
this was caused by the peeker buffering all data in memory in the case
of a reset. Stop causes the wrapper to switch the reader to the normal
connection when the peeker is exhausted.

Added Close method to RingBuffer, this causes the RingBuffer to return
an io.EOF when empty and closed.
Implemented icecast mp3 client functionality

Fairly naive implementation of ONLY mp3 source->client support with
metadata.

Added small tests for utility functions required for mp3 streaming to clients.
Adjusted metadata structures to support required functionality

These changes are mostly naive implementations to get things working,
should be looked over again to redesign it to be more friendly.
Implemented more mount functionality

NewMount now creates a bookkeeping goroutine for the created mount.
This goroutine is in charge of assigning clients to sources and
forwarding the correct metadata to clients. Communication is done
by an event channel with mountEvent's.

Source.SetOut renamed to Source.SetOutput
Added bufio usage in ClientHandler

ClientHandler now uses a bufio.Writer to share with the client
loop after acception.

Added Server.RemoveMount to allow for removal/destruction of a mount
when it is no longer needed.