12558 - Catch statement without an Exception specification should be disallowed

https://issues.dlang.org/show_bug.cgi?id=12558

**Rationale:**

The language should not encourage catching non-recoverable `Error` / `Throwable` exceptions, which the current syntax allows (and with ease):

```D
import std.stdio;

void main()
{
    try {
        assert(0);
    } catch  // this catches any Throwable!
        writeln("Caught a Throwable");
}
```

At the very least this feature might have been useful for catching `Exception` types only. But implicitly catching `Throwable`'s is IMHO way out of line. This is why I believe this syntax should go through a deprecation stage.

Note that this will only break code which compiles with `-de` (make deprecation an error).

Pinging for approval: @andralex @WalterBright

Before it can go green it requires:

- https://github.com/D-Programming-Language/druntime/pull/772
- https://github.com/D-Programming-Language/phobos/pull/2092