The problem you are having is that some of your filenames contain spaces. xargs will split that into multiple "filenames".
Add the -0 option to the xargs to make them split on NULs instead of whitespace, and the --null or -Z option to the grep command line to make it use NULs instead of newlines. (but omit the --null on the final grep if you want to read the output...). So putting it all together:
grep -r -iwlZ --include='*.adoc' 'who' . | xargs -r0 grep -iwlZ 'what' | xargs -r0 grep -iwlZ 'why' | xargs -r0 grep -iwlZ 'how' | xargs -r0 grep -iwl 'when'
Alternatively, eliminate the whitespace and other shell special characters from your filenames.
Otherwise, your solution is basically correct, though the answer by @James is correct that you need the -i option for case insensitive.