Repository: PyGithub/PyGithub

Issue:
Attributes are lost by PaginatedList
A snippet first:

```
g = Github()
r = g.get_repo('sourcerer-io/sourcerer-app')
cc = r.get_contributors()
print(cc[0].raw_data['contributions'])
```
This results in an error: KeyError: 'contributions'. The API call `GET repos/sourcerer-io/sourcerer-app/contributors` returns contributions just fine. 

This happens because of this line in github/PaginatedList.py:191:

`self.__contentClass(self.__requester, headers, element, completed=False)`

That is, each NamedUser is created as incomplete. Whet its attributes are accessed, a new API call is made that overwrites the object, a thus loses 'contributions' attribute.

I would be happy to make a pull request to set completed to True, but I am not sure what this will break since this seems to be used by pretty much everyone. It still needs to be addressed somehow because attributes are lost, and because it inflates the number of calls to the backend.



Discussion:
@sergey48k Seems like we removed the `contributions` attribute from `NamedUser` from #443, as we thought this attribute was not needed anymore. 
Well, I needed it. And I had to abandon pygithub in favor of good old HTTP requests for it.
Also, it's very surprising that NamedUser is created incomplete.
It isn't that the attribute wasn't needed, it wasn't populated. Let me dig into this.

Resolving patch:
diff --git a/github/NamedUser.py b/github/NamedUser.py
--- a/github/NamedUser.py
+++ b/github/NamedUser.py
@@ -101,6 +101,14 @@ def company(self):
         self._completeIfNotSet(self._company)
         return self._company.value
 
+    @property
+    def contributions(self):
+        """
+        :type: integer
+        """
+        self._completeIfNotSet(self._contributions)
+        return self._contributions.value
+
     @property
     def created_at(self):
         """
@@ -563,6 +571,7 @@ def _initAttributes(self):
         self._blog = github.GithubObject.NotSet
         self._collaborators = github.GithubObject.NotSet
         self._company = github.GithubObject.NotSet
+        self._contributions = github.GithubObject.NotSet
         self._created_at = github.GithubObject.NotSet
         self._disk_usage = github.GithubObject.NotSet
         self._email = github.GithubObject.NotSet
@@ -607,6 +616,8 @@ def _useAttributes(self, attributes):
             self._collaborators = self._makeIntAttribute(attributes["collaborators"])
         if "company" in attributes:  # pragma no branch
             self._company = self._makeStringAttribute(attributes["company"])
+        if "contributions" in attributes:  # pragma no branch
+            self._contributions = self._makeIntAttribute(attributes["contributions"])
         if "created_at" in attributes:  # pragma no branch
             self._created_at = self._makeDatetimeAttribute(attributes["created_at"])
         if "disk_usage" in attributes:  # pragma no branch


Test patch:
diff --git a/github/tests/Repository.py b/github/tests/Repository.py
--- a/github/tests/Repository.py
+++ b/github/tests/Repository.py
@@ -200,7 +200,7 @@ def testDelete(self):
         repo.delete()
 
     def testGetContributors(self):
-        self.assertListKeyEqual(self.repo.get_contributors(), lambda c: c.login, ["jacquev6"])
+        self.assertListKeyEqual(self.repo.get_contributors(), lambda c: (c.login, c.contributions), [("jacquev6", 355)])
 
     def testCreateMilestone(self):
         milestone = self.repo.create_milestone("Milestone created by PyGithub", state="open", description="Description created by PyGithub", due_on=datetime.date(2012, 6, 15))