Add mkWeak#, mkWeakNoFinalizer#, derefWeak#, and finalizeWeak# primops

These are needed for elerea, at least (see #210 ). Based on the GHC documentation these shouldn't be an issue in JS as far as correctness goes, I think.