/*
* 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) {