Improve Performance, reduce memory footprint

array_merge has performance issues as the input array's grow in size.
mStructs is a complex array and can be a large memory user in php.

mStructs was replaced with mLines which is the processed tag information
to reduce the memory footprint and allow caching of the results.

mLines is an array of files which can be joined together or appended
to an existing file.

Caching of the results of the tags includes a md5 of the file.  This
allows different git branches to continue to make use of the cache file
when switching.  Caching of fields is not included.  You will currently
get unexpected behaviour if using a cachefile with different fields included.

Performance seen from changes;
 - Moodle 2.4 codebase can be completely scanned in 3 minutes (approximate 1 hour before)
 - When updating Moodle 2.4 using a cache file, updates are approximately 3 seconds with no changes.
Fixed issues based on @mr-russ's PR.

1. Following ctags's behavior, use -V for verbose.
2. Use real path for file_get_contens and file_exists inside phar stub to avoid a weird PHP bug.