Task: Fixes #5008: Add H and X specification to P tautomerization rules (rdkit/rdkit#5077)

org: rdkit
repo: rdkit
pr_number: 5077
issue_title: Fixes #5008: Add H and X specification to P tautomerization rules
issue_body: The change is simple: make sure that the P involved in the tautomer shifts only has three neighbors and doesn't have an H (this is to avoid hypervalent P)

resolved_issues: number: 5008
title: Bad tautomers produced for phosphorous compounds
body: **Describe the bug**
rdMolStandardize.TautomerEnumerator().Enumerate() gives tautomers that chemically are not possible and rdMolStandardize.TautomerEnumerator().Canonicalize() assigns the chemically non-plausible tautomer as the canonical tautomer.

**To Reproduce**
```
from rdkit import Chem
from rdkit.Chem.MolStandardize import rdMolStandardize

lig = Chem.MolFromSmiles("NP(=O)(O)N(CCCl)CCCl")
canonicalizer = rdMolStandardize.TautomerEnumerator()
tautomers = canonicalizer.Enumerate(lig)

"""
Tautomers generated:
Tautomer 1: N=P(O)(O)N(CCCl)CCCl
Tautomer 2: N=[PH](=O)(O)N(CCCl)CCCl
Tautomer 3: NP(=O)(O)N(CCCl)CCCl
Tautomer 4: N[PH](=O)(=O)N(CCCl)CCCl
"""

canonical_tautomer = canonicalizer.Canonicalize(lig)

# Canonical tautomer: N[PH](=O)(=O)N(CCCl)CCCl
```

**Expected behavior**
Tautomers 2 and 4 should not be returned and tautomer 4 should not be picked as the canonical tautomer.


**Configuration:**
 - RDKit version: 2021.09.4
 - OS: CentOS Linux 7, GNOME Version 3.28.2
 - Python version (if relevant): 3.9.7
 - Are you using conda?: Yes
 - If you are using conda, which channel did you install the rdkit from?: conda-forge


Reference solution:
fix_patch: diff --git a/Code/GraphMol/MolStandardize/TautomerCatalog/tautomerTransforms.in b/Code/GraphMol/MolStandardize/TautomerCatalog/tautomerTransforms.in
index b8328122aae..ba4a030e9fb 100644
--- a/Code/GraphMol/MolStandardize/TautomerCatalog/tautomerTransforms.in
+++ b/Code/GraphMol/MolStandardize/TautomerCatalog/tautomerTransforms.in
@@ -49,7 +49,7 @@ const std::vector<
         std::make_tuple(
             std::string("1,3 heteroatom H shift"),
             std::string(
-                "[#7+0,S,O,Se,Te;!H0]-[#7X2,#6,#15]=[#7+0,#16,#8,Se,Te]"),
+                "[#7+0,S,O,Se,Te;!H0]-[#7X2,#6,#15X3H0]=[#7+0,#16,#8,Se,Te]"),
             std::string(""), std::string("")),
         std::make_tuple(
             std::string("1,5 aromatic heteroatom H shift"),
@@ -135,9 +135,9 @@ const std::vector<
                         std::string("[N+!H0]#[C-]"), std::string("#"),
                         std::string("-+")),
         std::make_tuple(std::string("phosphonic acid f"),
-                        std::string("[OH]-[PH0]"), std::string("="),
+                        std::string("[OH]-[PX3H0]"), std::string("="),
                         std::string("")),
         std::make_tuple(std::string("phosphonic acid r"),
-                        std::string("[PH]=[O]"), std::string("-"),
+                        std::string("[PX4H]=[O]"), std::string("-"),
                         std::string(""))};
 }  // namespace defaults
\ No newline at end of file