You might have to wait until some of the other features we're working on, like borrow bindings, also come into place to fully integrate a move-only cursor with the language. Without them, the only way to really produce a lifetime-dependent value would be with a higher-order function, like:
extension Statement {
borrowing func withCursor(_ body: (borrowing Cursor) -> ()) { ... }
}
extension Cursor {
borrowing func forEachRow(_ body: (borrowing Row) throws -> ()) rethrows { ... }
}