added a new transformation --replace-dependent-typedef

this pass mainly aims to reduce typedef's dependency, for example,
it does the following transformations:

template <class T> struct S {
  typedef typename T::type type;
};

struct A {
  typedef int type;
};

struct B {
  typedef S<A>::type type;
};

==>

template <class T> struct S {
  typedef typename T::type type;
};

struct A {
  typedef int type;
};

struct B {
  typedef int type;
};

And ``struct S'' will be removed by other passes.