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, except for the rare case when the parameter itself is used as a mutable variable inside the function. Imposing such a rule would just add a *ton* of syntactical noise for no tangible benefit.

By receiving such a type by mutable copy you get mutability at no cost. That means if the function wants to use that parameter as a variable in the function body at a later point, it can do that without changing the signature of the function, which is a significant enough benefit that such zealous enforcement of an otherwise alright rule (for other types) should be avoided.