Issue title: Enumerable.Single and Enumerable.SingleOrDefault overloaded implementations are inconsistent
 Issue body: There is an inconsistency between the implementations of [Enumerable.Single()][1] and [Enumerable.Single(predicate)][2]. Similarly there is another similar inconsistency between the implementations of [Enumerable.SingleOrDefault()][3] and [Enumerable.SingleOrDefault(predicate)][4]

The overloads which accept a predicate enumerate the whole sequence before eventually throwing, even if more than one matching elements were already found:

For consistency and performance reasons, it may be a good idea to make [Enumerable.Single(predicate)][2] and [Enumerable.SingleOrDefault(predicate)][4] methods able to fail fast and to throw an `InvalidOperationException` as soon as a second matching element is found.

If that seems like a reasonable change, I would gladly submit a pull request.

  [1]: https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/Enumerable.cs#L1260
  [2]: https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/Enumerable.cs#L1284
  [3]: https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/Enumerable.cs#L1306
  [4]: https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/Enumerable.cs#L1330
 Comments: 
 Comment 0: There is a really old Connect report about that by Jon Skeet that was *Won't Fix*ed: https://connect.microsoft.com/VisualStudio/feedback/details/639955
 Comment 1: Hello Marcin,

I found that Connect issue, as well as this one:

https://connect.microsoft.com/VisualStudio/feedback/details/810457

In the issue you mention, the reason why it was marked as "Won't fix" seems to be related to bug triage/schedule/priority. The answer even states (in 2011) that this issue will be re-opened for a future release. So I thought that in 2015, given the context – i.e. CoreFx being open-source, Microsoft accepting pull requests, etc. – it could be a good thing to fix this minor issue.
 Comment 2: @AlekseyTs fixing this to early out seems reasonable, what do you think?
 Comment 3: :+1:
 Comment 4: This is a subset of #2349, and as such was fixed by #2350.
{'source': 'GithubIssues', 'repo_name_with_owner': 'dotnet/corefx', 'issue_id': 64541166, 'repo_stars': 20466.0}