Compiles given expression into reusable unit. This is optional operation and in case
it's not supported by given transformed it should return the same expression that was
given in the input. If compilation is supported a compiled instance of the expression
should be returned.
expression - language specific expression
parameters - parameters e.g. imports defined in the process
compiled expression instance or same as given as argument expression