implement multiply with shifts and adds

two versions of shift add multiply:
1. iterates through all bits of representation
2. iterates only through as many bits as necessary