v4.6.0 - fix v4.5.0 boot deadlock (non-ASCII .ps1), add make lint/format

v4.5.0's scripts/acquire_lock.ps1 carried em-dashes in string literals with
no UTF-8 BOM. Windows PowerShell 5.1 reads .ps1 as ANSI, mangled them, and
the script stopped parsing. Because it signalled "lock held" with exit 1 --
the same code PowerShell uses for a parse error -- start.bat concluded the
lock was taken and bailed on every boot, deadlocking the stack exactly as
before the lock rewrite.

acquire_lock.ps1 is now pure ASCII, and its exit codes are unambiguous:
0 acquired, 10 held, anything else means the helper failed, in which case
start.bat and install.bat fall back to a plain mkdir lock rather than
refusing to boot.

New make lint runs in a throwaway Docker image and gates .ps1 on pure ASCII,
a parse check and PSScriptAnalyzer, plus shellcheck and shfmt on the shell
scripts. It self-tests its own non-ASCII detector so it cannot silently rot
into passing everything. make format applies shfmt through the same file
selection.

make lint and make test both pass.