Return std::string from mb_substr()

This is really bad idea:

    Made to return char* because we always pass the result to
    ncurses to print.

std::string::substr() returns temporary object which is soon
disposed along with result of c_str().
Better end check in produce_print_size

Do not rely on hard coded value.

Might fix issue #1.
Do not access files.end()

Use cases:
 - toggling selection off with single selected item
 - A<tab>V
 - resizing terminal
some pointless tunings
Merge branch 'fix-segfauls-and-unitialized' of https://github.com/xaizek/cursetag into xaizek-fix-segfauls-and-unitialized
Looks fine to me; see authors comments.
Merge branch 'xaizek-fix-segfauls-and-unitialized'
I'm not used to not having to fix my own blunders... Thanks!