Correctly handle non-matching patterns against literal values

The pass sys_core_fold did not correctly handle non-matching patterns in code
such as:

    0 = case <<>> of
            <<>> -> 0;
            a -> 1
        end.

Function case_opt_lit/3 is rewritten in two passes to first remove any
non-matching clause and only then potentially remove the related patterns
in each clause.

Reported-by: Ulf Norell