Lose the need to pass args to base() and self()

Use Function.prototype.caller internally instead. It is non-standard but
works everywhere.

This change is completely backwards-compatible.

Unit tests attached.
Merge branch 'optional-arguments'

* optional-arguments:
  Lose the need to pass args to base() and self()