on_start() :: {:ok, pid()} | :ignore | {:error, {:already_started, pid()} | term()}
option() :: {:name, atom()} | {:hibernate_after, timeout()}
add(atom(), term(), term()) :: {:ok, pid()} | {:error, term()}
lookup(atom(), term()) :: {:ok, pid()} | nil
remove(atom(), term()) :: :ok | {:error, term()}
start(module(), [option()]) :: on_start()