Split api package.

This change moves all of the generic functionality out of pkg/api and into pkg/conversion. This is one of the steps necessary to making #700 a reality.

No functionality is changed, even though it's a lot of code changes. In particular, the api package tests all still pass unchanged.

I feel like after we do this, we can refocuse the api package--move a bunch of stuff from tools into api, for example.
I tried two or three designs before coming up with this one. Note that, due to the flags causing it to loop through source fields only, it should be very fast, only having a few fields to examine. I did this because writing boilerplate accessors on every single api object in every version seems like an onerous usage requirement.