Refactor BitV internals to not use macro, reduce duplication

This was bothering me (and some other people). The macro was necessary in a transient step of my development, but I converged on a design where it was unnecessary (but did mean I didn't need to figure out the crazy return type).

This fixes it up.