Support multiple backends and add alloc backend

generally I like to see wg.Add(1) above each go func but this is fine.