_iter_match_use: construct _pkg_str instances

Now _match_use does not have to construct them itself.
diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index f954bad..a20a1e8 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -193,18 +193,27 @@
 			except KeyError:
 				continue
 
+			try:
+				cpv.slot
+			except AttributeError:
+				try:
+					cpv = _pkg_str(cpv, metadata=metadata,
+						settings=self.settings)
+				except InvalidData:
+					continue
+
 			if not self._match_use(atom, cpv, metadata):
 				continue
 
 			yield cpv
 
-	def _match_use(self, atom, cpv, metadata):
+	def _match_use(self, atom, pkg, metadata):
 		eapi_attrs = _get_eapi_attrs(metadata["EAPI"])
 		if eapi_attrs.iuse_effective:
 			iuse_implicit_match = self.settings._iuse_effective_match
 		else:
 			iuse_implicit_match = self.settings._iuse_implicit_match
-		usealiases = self.settings._use_manager.getUseAliases(self._pkg_str(cpv, metadata["repository"]))
+		usealiases = self.settings._use_manager.getUseAliases(pkg)
 		iuse = Package._iuse(None, metadata["IUSE"].split(), iuse_implicit_match, usealiases, metadata["EAPI"])
 
 		for x in atom.unevaluated_atom.use.required:
@@ -245,12 +254,6 @@
 
 		elif not self.settings.local_config:
 			# Check masked and forced flags for repoman.
-			try:
-				cpv.slot
-			except AttributeError:
-				pkg = _pkg_str(cpv, metadata=metadata, settings=self.settings)
-			else:
-				pkg = cpv
 			usemask = self.settings._getUseMask(pkg,
 				stable=self.settings._parent_stable)
 			if any(x in usemask for x in atom.use.enabled):