func (s *Stamp) Join(other *Stamp) {
	s.id = id.New().Sum(s.id, other.id)
	s.event = event.Join(s.event, other.event)
}
Join merges two stamps, producing a new one.
package itc
import (
	"fmt"
	"github.com/fgrid/itc/bit"
	"github.com/fgrid/itc/event"
	"github.com/fgrid/itc/id"
)
type Stamp struct {
	event *event.Event
	id    *id.ID
}
func NewStamp() *Stamp {
	return &Stamp{event: event.New(), id: id.New()}
}
func (s *Stamp) Event() {
	oldE := s.event.Clone()
	newE := s.fill()
	if newE.Equals(oldE) {
		s.event, _ = s.grow()
	} else {
		s.event = newE
	}
}
func (s *Stamp) fill() *event.Event {
	return fill(s.id, s.event)
}
func (s *Stamp) Fork() *Stamp {
	st := NewStamp()
	id1, id2 := s.id.Split()
	s.id = id1
	st.id = id2
	st.event = s.event.Clone()
	return st
}
func (s *Stamp) grow() (*event.Event, int) {
	return grow(s.id, s.event)
}