Clearly, there could be more features and it could be more efficient, but in terms of producing the simplest thing that works for me, I'm really happy with this:
https://gist.github.com/eraserhd/5435505
Usage:
(define-generic (length object))
(add-method (length (vector? v)) (vector-length s)) (add-method (length (string? s)) (string-length s)) (add-method (length (list? l)) (##length l))
(length "hello") => 5 (length '(1 2 3)) => 3 (length '#(a b)) => 2