generalized 'firstChars', and some refactoring towards point-free style

generalized firstChars:
`firstChars :: [String] -> [Maybe Char]`

use firstCharsOrElse instead of firstChars which takes a replacement character

some other refactorings for more concise code with point-free function composition
listToMaybe macht das. Die Funktion ist leider etwas unintuitiv benannt.
listToMaybe "" == Nothing
listToMaybe "abc" == Just 'a'