This PR aims to improve our standards conformance and LTO compatability.
ISO C forbids casting function points to or from void * as the size of a function pointer is allowed to be different from the size of a data pointer, the library should never have been doing this and especially as the casts aren't even required, so we eliminate them for all devices BMD compiles for.
It is an error to do pointer arithmetic on a void pointer - sizeof(void) has no standards-set size, and the operation is meaningless. Luckily all instances of this are trivially convertible to using typed pointers.
LTO requires we mark the vector table, reset vector and vector table's section all used/keep so it doesn't eliminate them due to nothing it can see calling into them.