thread is subset of process - not sure what is "set" and "subset" here. A process can be considered as a single thread. A process with more than one threads is possible in which more than one threads shares address space (virtual memory address space) of a process and there can be more than one thread in execution at a time if hardware has more than one cores.
threads don't share signal masks - at least on Linux. sigprocmask behavior is undefined for multi-threaded process. check pthread_sigmask. So threads do not share signal handling per say - they do share code segment of a process and so functions or handlers are shared.
Threads have 'almost no overhead' - not sure what do you mean by that. Threads have separate stacks, and register contexts. Also using threads require use of locks or mutices which is "overhead" IMO.
File system context - not sure what do you mean by file system context but file table is shared even among multiple processes, that is how files are shared. So one file can be open for reading in one process, for writing in second process.
Processes and threads both can be made either dependent or independent