[feature] [vector] inline data

With this commit, data (12 bytes on 32-bit and 24 bytes on 64-bit
architectures) will be inlined if the vector is small.  These numbers
are rather arbitrary (they make the shVector object aligned to 32 or 64
bytes) which may not be really optimal nor would they best fit every
application!

This is rather experimental though at the moment.  If it is critical
to performance of an application, I could think of making the inline
data amount configurable or something.

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[feature] assign-compatible function for structures

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
[update] [vector] remove inline memory overhead

Aligning shVector to a higher size and using the extra data as inline
turned out to actually have a negative effect (on shCompiler), probably
because of structures that had vector elements, where the cost of
copying the vectors or generally their bigger size was not worth it.

Indeed, the number of allocations had been lessened, but at the same
time the size of allocations had increased and there was a performance
hit as well.

This commit reduces the inline memory size to sizeof(size_t) and it is
written over max_size.  This means very little data can be inlined, such
as a single int or two.  However, this showed a generally smaller memory
footprint with no visible performance cost.

This can still be further tested, but as it is, it seems reasonable that
for very small arrays, dynamic allocation is avoided without any memory
overhead, so it's likely a good thing.  Of course, this highly depends
on the application whether it produces single-int vectors or not!  For
shCompiler, this somewhat makes sense, at least because lookahead size
is usually one.

Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>