FIFOBuffer now supports EOF and error conditions. If EOF flag is set,
buffer will not accept writing but will allow reading of the remainder
of data. After it is emptied, buffer remains in EOF state until flag is
cleared. Setting error flag, immediately empties the buffer and prevents
any I/O operation until flag is cleared. Flag setting will trigger
transiton notifications (if notifications are enabled). For details, see
the code diffs.