/*
* call-seq:
* dvector.slice!(int) -> number or nil
* dvector.slice!(start, length) -> sub_vector or nil
* dvector.slice!(range) -> sub_vector or nil
*
* Deletes the element(s) given by an index (optionally with a length)
* or by a range. Returns the deleted object, subvector, or
* <code>nil</code> if the index is out of range.
*
* a = Dvector.new(5) {|i| i*3 }
* a.slice!(1) -> 3
* a -> Dvector[0, 6, 9, 12]
* a.slice!(-1) -> 12
* a -> Dvector[0, 6, 9]
* a.slice!(100) -> nil
* a -> Dvector[0, 6, 9]
* a.slice!(1..2) -> Dvector[6, 9]
* a -> Dvector[0]
* a.slice!(1..2) -> Dvector[]
* a -> Dvector[0]
* a.slice!(0..2) -> Dvector[0]
* a -> Dvector[]
*/
VALUE dvector_slice_bang(int argc, VALUE *argv, VALUE ary) {