Removed the -Z once_fns compiler flag and added the new feature directive of the same name to replace it
Implemented the once_fns feature gate and added the feature directive to the libraries and tests that use them
Tidied up documentation around the once_fns feature directive
auto merge of #9863 : csainty/rust/issue-9755-once-fns-feature-directive, r=brson

Hello,

First time rust contributor here, please let me know if I need to sort out the contribution agreement for this.

I picked issue #9755 to dip my toe in the water, this pull request isn't quite complete though as I have not updated the documentation. The reason for this is that I haven't tracked down why this feature is gated so I don't feel I can write a justification of the same quality as the other features have been documented.
If someone would like to explain or point me at a mail thread I am happy to update with this change.

Hopefully I have understood the process of converting the old flag into a directive correctly.

Also just to call out what I am sure if a known quirk when adding feature directives, you can't build this code unless you have a snapshot of the compiler which knows about the feature directive. Chicken and the egg. I split the change into two commits, the first should be able to build a snapshot that can compile the second.