Restructure foreign-funcall-form and ffcall-body-libffi

Restructure foreign-funcall-form and ffcall-body-libffi so that the
fsbvp split is made first in the former, and the translate-objects is
called separately for the cases non-fsbvp, and fsbvp in the latter.
This should result in the same macroexpansion, but facilitates further
changes that will fix the macroexpansion so that translation of the
foreign object occurs before exiting the with-foreign-objects that
created it.
Call translate-objects inside with-foreign-objects

Reorder forms so that translate-objects is called when expanding the
body of the with-foreign-objects that allocates 'result, resulting in
an expansion that properly does the translation before exiting the
with-foreign-objects form. 

The error this corrects, with the translation done after exiting the
with-foreign-objects form, was reported by Cyrus Harmon.
New #'translate-objects-ret translates return type

New function translate-objects-ret translates the return type even
when it's of a built-in type. Previously, this was done inside the
translate-objects call in ffcall-body-libffi. This worked because
translate-objects didn't touch the built-in object, but this is a
little easier to follow, because translate-objects-ret wraps a call to
translate-objects with a (possible) translation of the return object.