ncm-spma: yum-based spma retry transaction with certain types of error

ncm-spma: Improve the working of yum-based spma in certain error conditions by retrying the transaction
@piojo `REPO_DEPS` is not recursive, even if you add `--recursive`. see output below
the output is for the `glibc-devel` rpm, which requires `glibc-headers` which requires `kernel-headers`. 

one would have to run `REPO_DEPS` multiple times to limit the chance of this happening, not sure how the runtime would be impacted. 

the onlything really recursive is `tree-requires`, but the `--qf` options is ignored, so one would have to write a custom parser. (and `tree-requires` gets slow with largish amount of packages)

the timing makes `REPO_WHATREQS` impractical imho.

for `REPO_DEPS` (the `--recursive` option is missing from the constant, but doesn't do much anyway):
```
[root@one01 ~]# time repoquery --requires --resolve --plugins --qf '%{NAME};%{ARCH}' glibc-headers
glibc-headers;x86_64
glibc;i686
kernel-headers;x86_64
bash;x86_64
glibc;x86_64

real	0m0.515s
user	0m0.400s
sys	0m0.110s
[root@one01 ~]# time repoquery --requires --resolve --plugins --qf '%{NAME};%{ARCH}' glibc-headers
glibc-headers;x86_64
glibc;i686
kernel-headers;x86_64
bash;x86_64
glibc;x86_64

real	0m0.516s
user	0m0.390s
sys	0m0.120s
[root@one01 ~]# time repoquery --recursive --requires --resolve --plugins --qf '%{NAME};%{ARCH}' glibc-devel
glibc-devel;x86_64
glibc-devel;i686
info;x86_64
glibc;i686
bash;x86_64
glibc-headers;x86_64
glibc;x86_64

real	0m0.905s
user	0m0.710s
sys	0m0.180s
```

for `REPO_WHATREQS` (`spare_deps_whatreq` does something entirely different to obtain the `to_rm` in this case, so hard to compare, but does not have this issue):
```
time repoquery --whatrequires --recursive --plugins --qf '%{NAME}\n%{NAME};%{ARCH}' glibc-devel |sort|uniq >& REPO_WHATREQS

real	4m21.817s
user	4m8.280s
sys	0m13.460s
```

with `--tree-requires`
```
[root@one01 ~]# time repoquery --recursive --tree-requires --resolve --plugins --qf '%{NAME};%{ARCH}' glibc-headers
glibc-headers-2.12-1.132.el6_5.2.x86_64 [cmd line]
 \_  bash-4.1.2-15.el6_4.x86_64 [1: /bin/sh]
 |   \_  glibc-2.12-1.132.el6_5.2.i686 [1: rtld(GNU_HASH)]
 |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [4: libc.so.6(GLIBC_2.4)(64bit), libdl.so.2()(64bit), libdl.so.2(GLIBC_2.2.5)(64bit), rtld(GNU_HASH)]
 |   \_  ncurses-libs-5.7-3.20090208.el6.i686 [1: ncurses-libs]
 |   |   \_  glibc-2.12-1.132.el6_5.2.i686 [13: /sbin/ldconfig, libc.so.6, libc.so.6(GLIBC_2.0), libc.so.6(GLIBC_2.1), libc.so.6(GLIBC_2.1.3), libc.so.6(GLIBC_2.2), libc.so.6(GLIBC_2.3), libc.so.6(GLIBC_2.3.4), libc.so.6(GLIBC_2.4), libdl.so.2, libdl.so.2(GLIBC_2.0), libdl.so.2(GLIBC_2.1), rtld(GNU_HASH)]
 |   |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [2: /sbin/ldconfig, rtld(GNU_HASH)]
 |   |   \_  ncurses-base-5.7-3.20090208.el6.x86_64 [1: ncurses-base = 5.7-3.20090208.el6]
 |   \_  ncurses-libs-5.7-3.20090208.el6.x86_64 [2: libtinfo.so.5()(64bit), ncurses-libs]
 |   |   \_  glibc-2.12-1.132.el6_5.2.i686 [2: /sbin/ldconfig, rtld(GNU_HASH)]
 |   |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [9: /sbin/ldconfig, libc.so.6()(64bit), libc.so.6(GLIBC_2.2.5)(64bit), libc.so.6(GLIBC_2.3)(64bit), libc.so.6(GLIBC_2.3.4)(64bit), libc.so.6(GLIBC_2.4)(64bit), libdl.so.2()(64bit), libdl.so.2(GLIBC_2.2.5)(64bit), rtld(GNU_HASH)]
 |   |   \_  ncurses-base-5.7-3.20090208.el6.x86_64 [1: ncurses-base = 5.7-3.20090208.el6]
 \_  glibc-2.12-1.132.el6_5.2.i686 [1: glibc = 2.12-1.132.el6_5.2]
 |   \_  basesystem-10.0-4.el6.noarch [1: basesystem]
 |   |   \_  filesystem-2.4.30-3.el6.x86_64 [1: filesystem]
 |   |   |   \_  setup-2.8.14-20.el6_4.1.noarch [1: setup >= 2.5.4-1]
 |   |   \_  setup-2.8.14-20.el6_4.1.noarch [1: setup]
 |   \_  glibc-common-2.12-1.132.el6_5.2.x86_64 [1: glibc-common = 2.12-1.132.el6_5.2]
 |   |   \_  bash-4.1.2-15.el6_4.x86_64 [2: /bin/bash, /bin/sh]
 |   |   \_  glibc-2.12-1.132.el6_5.2.i686 [1: glibc = 2.12-1.132.el6_5.2]
 |   |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [4: glibc = 2.12-1.132.el6_5.2, libc.so.6(GLIBC_2.3)(64bit), libdl.so.2()(64bit), libdl.so.2(GLIBC_2.2.5)(64bit)]
 |   |   \_  libcap-2.16-5.5.el6.x86_64 [1: libcap.so.2()(64bit)]
 |   |   |   \_  glibc-2.12-1.132.el6_5.2.i686 [2: /sbin/ldconfig, rtld(GNU_HASH)]
 |   |   |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [6: /sbin/ldconfig, libc.so.6()(64bit), libc.so.6(GLIBC_2.2.5)(64bit), libc.so.6(GLIBC_2.3)(64bit), libc.so.6(GLIBC_2.3.3)(64bit), rtld(GNU_HASH)]
 |   |   |   \_  libattr-2.4.44-7.el6.x86_64 [2: libattr.so.1()(64bit), libattr.so.1(ATTR_1.0)(64bit)]
 |   |   |   |   \_  glibc-2.12-1.132.el6_5.2.i686 [2: /sbin/ldconfig, rtld(GNU_HASH)]
 |   |   |   |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [5: /sbin/ldconfig, libc.so.6()(64bit), libc.so.6(GLIBC_2.2.5)(64bit), libc.so.6(GLIBC_2.4)(64bit), rtld(GNU_HASH)]
 |   |   \_  tzdata-2014e-1.el6.noarch [1: tzdata >= 2003a]
 |   \_  libgcc-4.4.7-4.el6.i686 [1: libgcc]
 |   \_  libgcc-4.4.7-4.el6.x86_64 [1: libgcc]
 |   \_  nss-softokn-freebl-3.14.3-10.el6_5.i686 [2: libfreebl3.so, libfreebl3.so(NSSRAWHASH_3.12.3)]
 |   |   \_  glibc-2.12-1.132.el6_5.2.i686 [5: libc.so.6(GLIBC_2.7), libdl.so.2, libdl.so.2(GLIBC_2.0), libdl.so.2(GLIBC_2.1), rtld(GNU_HASH)]
 |   |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [1: rtld(GNU_HASH)]
 \_  glibc-2.12-1.132.el6_5.2.x86_64 [1: glibc = 2.12-1.132.el6_5.2]
 |   \_  basesystem-10.0-4.el6.noarch [1: basesystem]
 |   \_  glibc-common-2.12-1.132.el6_5.2.x86_64 [1: glibc-common = 2.12-1.132.el6_5.2]
 |   \_  libgcc-4.4.7-4.el6.i686 [1: libgcc]
 |   \_  libgcc-4.4.7-4.el6.x86_64 [1: libgcc]
 |   \_  nss-softokn-freebl-3.14.3-10.el6_5.x86_64 [2: libfreebl3.so()(64bit), libfreebl3.so(NSSRAWHASH_3.12.3)(64bit)]
 |   |   \_  glibc-2.12-1.132.el6_5.2.i686 [1: rtld(GNU_HASH)]
 |   |   \_  glibc-2.12-1.132.el6_5.2.x86_64 [4: libc.so.6(GLIBC_2.7)(64bit), libdl.so.2()(64bit), libdl.so.2(GLIBC_2.2.5)(64bit), rtld(GNU_HASH)]
 \_  kernel-headers-2.6.32-431.17.1.el6.ug.x86_64 [2: kernel-headers, kernel-headers >= 2.2.1]

real	0m1.099s
user	0m1.020s
sys	0m0.070s
```