This example is partially working, but does not capitalize the last word in the visually selected text. Idea was to reduce work-load by staying in Vim. Get this to work on the last word in the visual selection and you are there. :) Per updated specs, pass "\\|" delimeted list of small words, with first letter capitalized.
" Visually select some text
":call title_case_selection:()
" and probably want to map it to some abbreviation
"
function title_case_selection:( list_of_words_bar_delimited )
let g:start_column=virtcol("'<") - 1
let g:end_column=virtcol("'>") + 1
let g:substitution_command=':s/\%>'.g:start_column.'v\<\(\w\)\(\w*\)\>\%<'.g:end_column.'v/\u\1\L\2/g'
call feedkeys ( g:substitution_command )
call feedkeys ("\<cr>", 't')
let g:substitution_command=':s/\%>'.g:start_column.'v\<\('.a:list_of_words_bar_delimited.'\)\>\%<'.g:end_column.'v/\L\1/g'
call feedkeys ( g:substitution_command )
call feedkeys ("\<cr>", 't')
endfunction
"abba zabba is a very yummy candy! <- Visually select this line
:call title_case_selection:("Is\\|A")