To do this, the software you're running needs to be cluster-aware and support the scenarios you want to use. You can't just take any application and "cluster" it to give it a total of 40 CPUs from 20 different servers. It just can't be done.
Some applications can be clustered, e.g. make has a plugin (I forget what it's called) that can use remote servers to compile your applications, and Microsoft SQL Server is cluster-aware and can be used for failover purposes.
The closest you're going to get is with VMWare ESXi or Microsoft Hyper-V (and probably others as well, but I'm most familiar with these two) as these hypervisors ARE cluster aware (VMWare server is NOT).
This can give you high availability, fault tolerance and automatic migration based on host loads within the cluster (assuming you have shared storage), but it can't spread any software out over the cluster. It's just not possible.