Support ffi.new syntax

It parses ffi.new and does necessary interpretation.

Example:
ffi.new("int[5]") indicates to allocate space which could contain 5
ints, and is translated to
base + i	: ffi
base + i+1	: new
base + i+2	: csymbol id for "int" type
base + i+3	: 5
base + i+4	: call

Signed-off-by: Qingping Hou <qingping.hou@gmail.com>
Support ffi.new logic in vm

It would allocate the space to contain the array, and treat the return
value as ktap_cdata in pointer type.

Signed-off-by: Yicheng Qin <qycqycqycqycqyc@gmail.com>
Signed-off-by: Qingping Hou <qingping.hou@gmail.com>
New tests for ffi.new

Signed-off-by: Yicheng Qin <qycqycqycqycqyc@gmail.com>
Signed-off-by: Qingping Hou <qingping.hou@gmail.com>
Refactor ffi related function calls

Use 'ffi' as the keyword for ffi related functions, which are called in
ffi.* way

Supported API:
- ffi.cdef[[ long string ]]: c definition
- ffi.cdef("string"): c definition
- ffi.cnew("int[5]"): c new

For implementation, parser is hacked to treat ffi.* expression in some
special way. When it finds that the first token is 'ffi', and the
second one is '.', it is directed to parse it as ffi related function
calls.

Signed-off-by: Yicheng Qin <qycqycqycqycqyc@gmail.com>
Support ffi.free

Free the variable that is generated by ffi.new

Signed-off-by: Yicheng Qin <qycqycqycqycqyc@gmail.com>
Refactor from C.func to ffi.C.func

Move C.func to ffi module, because it belongs to ffi function calls.
remove unused local variable

Signed-off-by: Jovi Zhangwei <jovi.zhangwei@gmail.com>