crt0: Correct environment and argument parsing

From: Will Sowerbutts

kernel sets up the stack differently: argc, argv, environ[]
ultoa: this one escaped the pruning

Noted by Will Sowerbutts
putenv: Fix NULL environment handling

From: Will Sowerbutts
init: Fix environment handling

From: Will Sowerbutts
devsys: note a Z80 assumption to fix
syscall_exec: Introduce the notion of both a base and a load address

Eg on Z80 our base is 0 but we load at 0x200. On 6502 our base and load
are going to be higher and the same, ditto probably 6809
bank16/32k: compute common area allowance

We propogate the common into each high bank so must allow for it. Remove
the hardcoded 4K assumption as it's trivial to do so, and also socz80 at
least doesn't need 0xF000 to be the common base.
usermem: always trap NULL pointers

Low vectors are hard due to the cp/mn emulation
pagemap_realloc: This is the amount of memory neede relative to BASE not LOAD

Now we have a clear divide fix up the broken assumption