/*
* call-seq:
* open(filename, mode='wb', &block=nil) -> Bzip2::Writer
*
* @param [String] filename the name of the file to write to
* @param [String] mode a mode string passed to Kernel#open
* @yieldparam [Bzip2::Writer] writer the Bzip2::Writer instance
*
* If a block is given, the created Bzip2::Writer instance is yielded to the
* block and will be closed when the block completes. It is guaranteed via
* +ensure+ that the writer is closed
*
* If a block is not given, a Bzip2::Writer instance will be returned
*
* Bzip2::Writer.open('file') { |f| f << data }
*
* writer = Bzip2::Writer.open('file')
* writer << data
* writer.close
*
* @return [Bzip2::Writer, nil]
*/
static VALUE bz_writer_s_open(int argc, VALUE *argv, VALUE obj) {