Phalcon\Di Optimizations

  * use return_value wherever possible instead of temporary variables;
  * use phalcon_fetch_property() instead of phalcon_read_property() (return value then does not have to be observed)
  * use phalcon_array_isset_fetch() to combine isse()/fetch() operations and avoid extra search pass
  * validate arguments and throw exceptions before the memory frame is created
  * do not convert NULLs to zvals unless absolutely necessary