/*
 * call-seq:
 *   open(filename, &block=nil) -> Bzip2::Reader
 *
 * @param [String] filename the name of the file to read from
 * @yieldparam [Bzip2::Reader] reader the Bzip2::Reader instance
 *
 * If a block is given, the created Bzip2::Reader instance is yielded to the
 * block and will be closed when the block completes. It is guaranteed via
 * +ensure+ that the reader is closed
 *
 * If a block is not given, a Bzip2::Reader instance will be returned
 *
 *    Bzip2::Reader.open('file') { |f| puts f.gets }
 *
 *    reader = Bzip2::Reader.open('file')
 *    puts reader.gets
 *    reader.close
 *
 * @return [Bzip2::Reader, nil]
 */
static VALUE bz_reader_s_open(int argc, VALUE *argv, VALUE obj) {