So if we send to multiple addresses one by one, each additional address will add ~10 bytes? For example, if we pack 100 receiving addresses into one transaction, then we can save ~1000 bytes of space?
That depends on what you are comparing it to, and how you structure the tranaction.
Lets say I receive 3 payments of 1 BTC each. It doesn't matter whether I used 1, 2, or 3 addresses to receive the payments, the are three distinct payments so they are 3 distinct outputs).
Transaction_A
Transaction_B
Transaction_C
Now, lets say I want to send payments of 0.1 BTC to 4 different people...
I could do the following:
Create a single transaction that spends everything in my wallet and pays all 4 people in one payment...
This would have 3 inputs (since I'm spending all three payments that I received)
This would have 5 outputs (one for each person that I'm sending to, plus an additional one to send the 2.6 BTC of change back into my wallet)
The transaction size would be approximately:
10 + (3 X 149) + (5 X 34) = 627 bytes
Or I could do the following:
Create a single transaction that spends only the bitcoins that I received in one of the transactions listed above (for example, Transaction_A) and pays all 4 people in one payment...
This would have only 1 input (since I'm only spending one of the three payments that I received)
This would have 5 outputs (one for each person that I'm sending to, plus an additional one to send the 0.6 BTC of change back into my wallet)
The transaction size would be approximately:
10 + (1 X 149) + (5 X 34) = 329 bytes
Or I could do the following:
Create 3 separate transactions that each spend the bitcoins that I received in a different one of the transactions listed above and pays a different 1 of the 4 people, then create a 4th transaction that spends the change that I receive from one of those transactions to pay the 4th person...
Each of the 4 transactions created would have only 1 input (since I'm only spending one of the three payments that I received)
Each of the 4 transactions created would have 2 outputs (one for the person that I'm sending to, plus an additional one to send the change back into my wallet)
The total size of all 4 transactions added together would be approximately:
4 X [ 10 + (1 X 149) + (2 X 34) ] = 908 bytes
I'm sure you could come up with many other ways to combine inputs, outputs, and/or transactions to have other sizes. The smallest possible (assuming you don't want to pay a 0.6 BTC transaction fee) will be the 329 byte solution above. If you were willing to pay a 0.6 BTC transaction fee, then you wouldn't need the additional output to send the change back into your wallet. In that case you would reduce the size of the transaction by 34 bytes to only 295 bytes.
NOTE:
All of these descriptions of transaction sizes and costs are based on an assumption that you are NOT building SegWit transactions. These estimates and calculations are all for traditional non-SegWit transaction structures. Building SegWit transactions would have slightly different sizes and different cost calcualtions, but it would probably be a good idea to make sure you understand this traditional way of structuring transactions first, and then you can learn about how SegWit is different.