@pertsev had some comments on approveAndCall(...) and receiveApproval(...) on the error handling and malicious contracts.
I will be keeping the design for approveAndCall(...) and receiveApproval(...) the same, is it is what I intended, but will be adding comments to add some warnings.