stamp.compose() implementation

I decided that it is not a good idea to modify 'this' while composing two stamps. So, the `stamp.compose()` creates a new stamp unlike the 'methods', 'state', and 'enclose' functions. All that is described in the docs.

Also minor optimisations were made. See the commit log messages.
oops. :) Will fix.