check if the requested memory is really available in _sbrk_r

Most RIOT ports do not check whether the memory returned by `_sbrk_r` actually exists, lpc1768 is the notable exception.

For it and all other newlib using ports, heap comes after the stack and occupies the remaining available RAM, so it's only necessary to check whether the heap pointer would exceed the physical range.

I've also re-added an old test that causes a hard fault without the patch (because it eventually tries to allocate memory that doesn't exist), but works as intended with the patch, even free works (due to newlib magic).