Add attributes to `std.socket`

`std.socket` now has `@safe` public API.

Also added few fixes.
> That would be every parameter ever of a type with no indirection,

Yes.

> except for the rare case when the parameter itself is used as a mutable variable inside the function.

No, in such cases the function should be rewritten to have a mutable variable with copy of the argument.

> Imposing such a rule would just add a ton of syntactical noise for no tangible benefit.

`in` isn't that big noise. The problem with *D* language is that it requires explicit `in`/`const`/`immutable` when the right choise is explicit `mutable`. Anyway I'm not going to argue *everything should be `const` except it can't* rule, its too abvious and too useful for me to even have any doubts.