func NewLine(b []byte) *Line {
	sum := md5.Sum(b)
	return &Line{
		hash: sum[:],
		str:  b,
	}
}
NewLine from bytes
package diff
import (
	"bufio"
	"bytes"
	"crypto/md5"
	"encoding/binary"
	"strings"
)
var _ Comparable = Char(0)
type Char rune
func (c Char) Hash() []byte {
	b := make([]byte, 4)
	binary.BigEndian.PutUint32(b[:], uint32(c))
	return b
}
type String []Comparable
func NewString(s string) String {
	cs := make([]Comparable, len(s))
	for i, c := range s {
		cs[i] = Char(c)
	}
	return cs
}
func (s String) String() string {
	out := ""
	for _, c := range s {
		out += string(c.(Char))
	}
	return out
}
var _ Comparable = &Line{}
type Line struct {
	hash []byte
	str  []byte
}