feat(browser): improve logging
feat: cache source files

Save FS access for the cost of more memory usage.
Each preprocessed file was written to the disk and then read by the web server (times number of browsers).

Now, the preprocessor reads every file and store it in the memory, so the web server does not read FS.
fix(config): apply CLI logger options as soon as we can

We use logging even before parsing the config file - for instance to show the path of the config file that is actually being loaded. At that time, we can't configure the logger based on the config file, but we can already apply the command line arguments.
fix(config): ignore empty string patterns

An empty string pattern is a mistake - there is no reason to do that. It can however happen (for instance when you generate the config file).

Before this fix, Karma would try to watch this empty string pattern, which would result in watching the entire `basePath` directory.

Now, the pattern will be ignored and a warning showed.
test(e2e): add a test for coverage of coffee script files