make unicode_cast more generic

unicode_cast is now a template function that works with different types
of containers. Especialy it now works with both std::wstring and
vector<wchar_t>
fix some includes
simplyfy utf8::iterator implementation
remove double declarations in unicode.hpp
add custom codecvt for better error mesages.

this codecvt gibes errormessages in LOG_FS if it meets an invalid utf8 char.
also the boost codecvt seems inconsistetn becasue it seems on msvc it acepts utf8 AND ansi while it only accpets ansi on mingw.
use unicode pargammargs on windows
fixup tests