pfff: support for namespace part1, namespace decl

Summary:
Some people on github want support for namespace in pfff.
Also phabricator is now using third party library using namespace.

Test Plan: make test

Reviewers: pieter, jiaol, julienv, amenghra

Reviewed By: julienv

CC: ptarjan, jdelong

Differential Revision: https://phabricator.fb.com/D881637
pfff: support for namespace part2, namespace import and alias

Summary:
Just support in the AST. I'll update stags, scheck, codegraph, etc
later.

Test Plan:
    $ make test
    $ ~/pfff/pfff -dump_php namespace_use.php
    [NamespaceUse(i_1, ImportNamespace(Name(("name", i_2))), i_3);
     NamespaceUse(i_4,
       AliasNamespace(Name(("name", i_5)), i_6, Name(("foo", i_7))), i_8);
     FinalDef(i_9)]

Reviewers: pieter, jiaol, julienv, amenghra, zoel

Reviewed By: julienv

CC: ptarjan, jdelong

Differential Revision: https://phabricator.fb.com/D881697
* lang_php/parsing/parser_php.mly: misc
* Makefile: use BASICLIBS for pfff
pfff: support for namespace part3, introduce a real qualified_ident type

Summary:
Ast_php.qualified_ident has now a proper type (a list).
I've fixed all the TODO in the grammar.

I just modified lang_php/parsing/ for now.
The rest of pfff does not compile because changing from
a string to a list of string for ident has lots of repercussions
in the pfff codebase, mostly repetitive refactoring that I will
do in another diff (using spatch for ocaml).

Test Plan:
$ cd ~/pfff/lang_php/parsing; make
$ cd pfff/; make pfff
$ cd tests/php/parsing;

$ ~/pfff/pfff -dump_php namespace_use.php
[NamespaceUse(i_1,
   ImportNamespace(
     [Left(Name(("my", i_2))); Right(i_3); Left(Name(("name", i_4)))]), i_5);
 NamespaceUse(i_6,
   AliasNamespace(
     [Left(Name(("my", i_7))); Right(i_8); Left(Name(("name", i_9)))], i_10,
     Name(("foo", i_11))), i_12); FinalDef(i_13)]

$ ~/pfff/pfff -dump_php namespace.php
[NamespaceDef(i_1,
   [Left(Name(("my", i_2))); Right(i_3); Left(Name(("name", i_4)))], i_5);
 ClassDef(
   {c_type=ClassRegular(i_6); c_name=Name(("Cat", i_7)); c_tparams=None;
    c_extends=None; c_implements=None; c_attrs=None;
    c_body=(i_8,
            [Method(
               {f_tok=i_9; f_type=MethodRegular; f_attrs=None;
                f_modifiers=[(Static, i_10)]; f_ref=None;
                f_name=Name(("says", i_11)); f_tparams=None;
                f_params=(i_12, [], i_13); f_return_type=None;
                f_body=(i_14,
                        [Echo(i_15, [Left(Sc(C(String(("meoow\n", i_16)))))],
                           i_17)],
                        i_18);
                })],
            i_19);
    });
 StmtList(
   [ExprStmt(
      Assign(IdVar(DName(("o", i_20)), Ref(NoScope)), i_21,
        New(i_22, Id(XName([Left(Name(("Cat", i_23)))])),
          Some((i_24, [], i_25)))), i_26);
    ExprStmt(
      Call(
        ObjGet(IdVar(DName(("o", i_27)), Ref(NoScope)), i_28,
          Id(XName([Left(Name(("says", i_29)))]))), (i_30, [], i_31)), i_32);
    ExprStmt(
      Assign(IdVar(DName(("o", i_33)), Ref(NoScope)), i_34,
        New(i_35,
          Id(
            XName(
              [Right(i_36); Left(Name(("my", i_37))); Right(i_38);
               Left(Name(("name", i_39))); Right(i_40);
               Left(Name(("Cat", i_41)))])), Some((i_42, [], i_43)))), i_44);
    ExprStmt(
      Call(
        ObjGet(IdVar(DName(("o", i_45)), Ref(NoScope)), i_46,
          Id(XName([Left(Name(("says", i_47)))]))), (i_48, [], i_49)), i_50);
    Echo(i_51, [Left(Sc(C(PreProcess((NamespaceC, i_52)))))], i_53)]);
 FinalDef(i_54)]

Reviewers: pieter, jiaol, julienv, amenghra, zoel, glevi

Reviewed By: julienv

CC: ptarjan, jdelong

Differential Revision: https://phabricator.fb.com/D881990
CEs on QI for namespace
* lang_php/parsing/ast_php.ml: misc