Fix genCmain code to remove ambiguity of `&main` expression

It was introduced by pull#2476, but the expression `&main` which is implicitly
inserted would conflict with two extern(C) and (D) "main" functions in
user module.

Instead, separate the entry-point code in the hidden module __entrypoint.d
Add "ambiguous type" and ready to use it
fix Issue 1983 - Delegates violate const

Carry information which function is overloaded and use it properly.
fix Issue 7322 - Taking address of deprecated functions isn't refused