A CPU core can basically be seen as a single processing unit. A two core CPU essentially has two seperate processing units, which are almost fully independent of eachother (CPU cache and main memory are shared between all cores).
Threads are essentially the highest level of code that is executed by a processer. A process spawns a thread upon completion, and all active threads (within Windows atleast) are operated on for some period, giving the illusion you are doing multiple things at one time. While every process has a minimum of one thread, there is no maximum of threads that can be created for specilized tasks.
In theory, multiple threads allow for a single process to perform multiple tasks at the same time. IE: One thread operates the windows GUI, another handles the main program loop, another deals with program AI, another handles graphical effects, etc. In a multi-CPU/multi-core environment, parrallel threads can greatly speed up the execution of a program. [It must be noted, that due to the way Windows is designed, perfectly parrallel threads is impossible, so you'll never get double the performance if you double the threads, even in the best of situations.]
Hyperthreading is a term given to intel CPU's that have the ability for a single core to execute more then one thread at one time. This is done by coping SOME, but not all, of the parts of a CPU core. Depending on the task one is doing, hyperthreading can be, at best, as good as a seperate core. At worst, there can be a minimal loss in performance.