Script API

Exported engine functions now required to have one of two generic prototypes that accept an array of Script Value objects and return Script Value (of undefined type - if the engine function is not supposed to have return value). One of those prototypes is for calling "object" function, it has a pointer to script object before the array.

Unfortunately, plugins cannot be fixed right away, because that would require changing plugin API, so that is left for "better future". Therefore plugin functions are still called unsafe way.

This change is quite serious too. I used descriptive macros for engine function calls to simplify and speed up coding, but could make some occasional mistakes. I found 4 so far, all related to returning undefined value instead of Int.
So, this is something to consider before actually accepting this pull.