Defines a struct which stores a template and its information.
@type collection() :: %{optional(binary()) => t()}
@type t() :: %Serum.Template{ ast: Macro.t(), file: binary(), include_resolved?: boolean(), name: binary(), type: type() }
@type type() :: :template | :include
@spec new(Macro.t(), binary(), type(), binary()) :: t()