What you want is
Space UP::
if (A_PriorKey = "space")
SendInput {Space}
SendInput {Shift Up}
return
Space::Shift
(Autohotkey_L required)
I can't type fluently like that, though, because whitespaces are only produced when space is released and not when it's pressed.
There's also another interesting script:
~space::shift
~ means the original key isn't hidden from the system, so the whitespace is produced immediately, but if you hold space afterwards it acts like shift.
I use neither.