Even better algorithm for ReSubstTemplateArg.

In the case:

   template <class T ,class U = T ,class B = ::boo::detail::empty_base<T> ,class O = typename boo::is_chained_base<U>::value >
   struct equality_comparable : boo::equality_comparable2<T, U, B> {};

   template<class T, class U, class B>
   struct equality_comparable<T, U, B, ::boo::detail::true_t> : boo::equality_comparable1<T, U> {};

   template <class T, class B>
   struct equality_comparable<T, T, B, ::boo::detail::false_t> : boo::equality_comparable1<T, B> {};

The previous algorithm did not properly notice that the 2nd argument of the base class should *not* be
replaced by the 2nd argument of the template ... but rather by the 3rd.

Rather than counting the dependent/replaced argument we now rely on the recorded index and depth
in the AST node.